Не получается протабулировать функцию F на интервале Xstart до Xfinish с шагом dX

Рейтинг: -3Ответов: 1Опубликовано: 11.01.2023

Задание такое: задание

Мой код ниже(для варианта 21). Компилятор ругается. Не пойму что не так

main.p(22,44) Error: Incompatible types: got "Double" expected "ShortInt" main.p(23,17) Error: Incompatible types: got "Double" expected "ShortInt" main.p(24,7) Fatal: Syntax error, ";" expected but "identifier WRITE" found

var
  xn, xk, dx, x, y, a, b, c: shortint;
begin
  write('xn = ');
  readln(xn);
  write('xk = ');
  readln(xk);
  write('dx = ');
  readln(dx);
  write('a = ');
  readln(a);
  write('b = ');
  readln(b);
  write('c = ');
  readln(c);
  writeln('x');
  x := xn;
  while x < xk do
    begin
      if (x<0) or (b <> 0) then y := a*(x*x*x)+b
      else if(x>0) and (b=0) then y:= (x-a)/(x-c)
      else y:= x/c
      write(x, ' ')
      x := x + dx
    end;
  readln
end.

Ответы

▲ 0

Кристин, паскаль ругается что вы пытаетесь сравнивать и/или приравнивать shortint что целочисленное число -128..127 с числом с плавающей точкой Extended.

Если вы хотите результат с десятичными, то поменяйте тип y на двоичное число var y: Extended; если вам нужны чистые числа, то меняйте операцию деления с двоичной y := 4 / 2 на целостную y := 4 div 2, потому что оператор деления / уже автоматом начинает считать ваши числа как те - что имеют точку в наличии как пример 4.5

А ещё в вашем примере он очень сильно ругается, что вы забыли поставить semicolon а именно знак ; после окончания каждого выражения.

А ещё он сказал что вы три раза присвоили значение к y и после некогда его не использовали.

program Project1;
{$APPTYPE CONSOLE}
var
  xn, xk, dx, x, a, b, c: shortint;
  y: Extended;
begin
  write('xn = ');
  readln(xn);
  write('xk = ');
  readln(xk);
  write('dx = ');
  readln(dx);
  write('a = ');
  readln(a);
  write('b = ');
  readln(b);
  write('c = ');
  readln(c);
  writeln('x');
  x := xn;
  while x < xk do
    begin
      if (x<0) or (b <> 0) then y := a*(x*x*x)+b // Тут y :=
      else if(x>0) and (b=0) then y:= (x-a)/(x-c)  // Тут y :=
      else y:= x/c; // И тут y :=
      write(x, ' ');
      x := x + dx;
    end;
    // иииии что делать с Y ??????????
  readln
end.

ps: Я к сожалению очень плохо владею русским языком, чтобы понять ваше задание в целом, но по программированию можете спокойно обращаться.