Объясните, пожалуйста, в чем ошибка program Funk; uses Crt; var x,y: integer; begin for...

0 голосов
75 просмотров

Объясните, пожалуйста, в чем ошибка
program Funk;
uses Crt;
var x,y: integer;
begin
for x:=-8 to 8 do
y:=x*x+4/x+3;
writeln (y);
writeln (x);
if x=0 then writeln ('Функция не определена');
readkey
end.
Пишет, что нельзя преобразовать тип real к integer, что то значит?


Информатика (12 баллов) | 75 просмотров
0

integer - числа целые, а у тебя в строке:y:=x*x+4/x+3;4 делится на x, там может получится дробь, вот компилятор и ругается...

0

А что должна делать прога?

0

Вывести значение x и y

0

program Funk;uses Crt;varx: integer;y:real;beginfor x:=-8 to 8 doBeginif x=0 then writeln ('Функция не определена')else Beginy:=x*x+4/x+3;writeln('f(',x,') = ',y);EndEnd;readkeyend.

Дан 1 ответ
0 голосов

В операторе y:=x*x+4/x+3 используется операция деления, которая всегда возвращает вещественный тип. Следовательно, и всё выражение в правой части всегда будет иметь вещественный тип. А в левой части стоит переменная целого типа. Присваивание вещественного значения целочисленной переменной запрещено правилами языка Паскаль.
Чтобы избавиться от ошибки, нужно знать алгоритм, который реализует программа. В зависимости от алгоритма может быть использована операция целочисленного деления, может быть использована функция Trunc(), возвращающая целочисленное значение аргумента, либо переменная y должна объявляться вещественной.

(142k баллов)