Неверная вещественная операция и деление на ноль, как исправить? - Pascal ABC
Формулировка задачи:
Есть задача: Вычислить и вывести значение функции при изменении значения аргумента от А до В с шагом С и определить минимальное и максимальное значение функции на отрезке. Использовать в одной программе три различных типа простых циклов (IF THEN GOTO, WHILE-DO, REPEAT-UNTIL). Мой вариант задачи на скриншоте, а=-2, b=2, шаг с=0.2.
В строке 30
пишет: Неверная вещественная операция,в строке 82
деление на ноль, как исправить? Вот код:Решение задачи: «Неверная вещественная операция и деление на ноль, как исправить?»
textual
Листинг программы
const a=-2;
b=2;
c=0.2;
var x,y,max,min:real;
begin
x:=a;
y:=x*x+sqr(sin((x+pi)/2)/cos((x+pi)/2));
max:=y;
min:=y;
repeat
if x<=-0.5 then y:=x*x+sqr(sin((x+pi)/2)/cos((x+pi)/2))
else if x<=0.5 then y:=cos(exp(ln(abs(x+ln(abs(x))))/5))
else if x+exp(x)*sqrt(x+1)-pi<0 then y:=exp(ln(-(x+exp(x)*sqrt(x+1)-pi))/3)
else y:=exp(ln(x+exp(x)*sqrt(x+1)-pi)/3);
if y>max then max:=y
else if y<min then min:=y;
writeln('y(',x:0:1,') = ',y:0:5);
x:=x+c;
until x>=b;
writeln('max = ',max:0:5,', min = ',min:0:5);
readln
end.
Объяснение кода листинга программы
- В начале кода объявлены константы и переменные: — a, b — целочисленные константы со значениями -2 и 2 соответственно; — c — вещественная константа со значением 0.2; — x, y, max, min — переменные типа real.
- Далее в блоке begin происходит инициализация переменной x значением a.
- Затем в блоке begin происходит вычисление значения переменной y по формуле x*x+sqr(sin((x+pi)/2)/cos((x+pi)/2)).
- Значения переменных max и min инициализируются значением переменной y.
- Далее в цикле repeat выполняется проверка значения переменной x и в зависимости от этого значения переменной y присваивается одно из трех возможных значений: — если x<=-0.5, то y = xx+sqr(sin((x+pi)/2)/cos((x+pi)/2)); — если x<=0.5, то y = cos(exp(ln(abs(x+ln(abs(x))))/5)); — если x+exp(x)sqrt(x+1)-pi<0, то y = exp(ln(-(x+exp(x)sqrt(x+1)-pi))/3); — если x+exp(x)sqrt(x+1)-pi>=0, то y = exp(ln(x+exp(x)*sqrt(x+1)-pi)/3).
- В каждой итерации цикла проверяется, является ли значение переменной y больше max, если да, то max присваивается значение переменной y, иначе проверяется, является ли значение переменной y меньше min, если да, то min присваивается значение переменной y.
- Выводится значение переменной y с шагом 0.1, значение переменной x увеличивается на c.
- После окончания цикла repeat выводится значение переменных max и min.
- В конце программы ожидается ввод данных с помощью функции readln.