Вещественное деление на ноль

Program test;
uses crt;
var
x : integer;
y : real;
begin
ClrScr;
write('Введите значение x');
read(x);
begin y:=((sin(sqr(x))/cos(sqr(x)))+cos(x))/(ln(abs(sqr(x)+1)));
write ('Ответ=', y:3:2);
end
end.
Сама формула работает и при x=1 получается нужный ответ, но при делении на ноль программа выдает ошибку "вещественное деление на 0"Что следует сделать, чтобы программа выполнялась?
6 ответов

Математику в школе не проходили? Делить на ноль нельзя. Перед делением проводите проверку на значение знаменателя.Ну есть еще способ, если устроит (если задача это позволит) - перед делением увеличить/уменьшить знаменатель на мизерную величину 0.000001. Главное чтобы эта мизерная величина (при нуле) не вызвала переполнение типа.


Математику в школе не проходили? Делить на ноль нельзя. Перед делением проводите проверку на значение знаменателя.Ну есть еще способ, если устроит (если задача это позволит) - перед делением увеличить/уменьшить знаменатель на мизерную величину 0.000001. Главное чтобы эта мизерная величина (при нуле) не вызвала переполнение типа.
Как провести проверку именно знаменателя?я написал if ln(x):=0 then write ('Ответ = 0')но тогда код ошибку выдает: Встречено ':=', а ожидался оператор


Между оператором присваивания и оператором сравнения имеется существенная разница. Об этом Вы можете прочитать в любом учебнике.


var x,y:real;
begin
write('Введите значение x');
readln(x);
if x=0 then write('y не определено')//ln(0+1)=0
else
 begin
  y:=((sin(sqr(x))/cos(sqr(x)))+cos(x))/(ln(sqr(x)+1)); //нафига abs, x^2+1 всегда >0
  write ('Ответ=', y:0:2);
 end;
end.


var x,y:real;
begin
write('Введите значение x');
readln(x);
if x=0 then write('y не определено')//ln(0+1)=0
else
 begin
  y:=((sin(sqr(x))/cos(sqr(x)))+cos(x))/(ln(sqr(x)+1)); //нафига abs, x^2+1 всегда >0
  write ('Ответ=', y:0:2);
 end;
end.
хех, я также делал, но препод агрился на то, что в числителе при нуле все норм и распространять if x=0 then write('y не определено') не надо я думал, может как-то распространить это условие, но только на знаменатель ? ток хз как


Ну формально нужно так
if (x=0)or(cos(sqr(x))=0) then write('y не определено')
но ввести с клавиатуры число, равное abs(sqrt(pi/2)), невозможно.