НАЙДИТЕ ОШИБКУ В КОДЕ! задание:Написать программу, которая бы рассчитывала значение...

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

НАЙДИТЕ ОШИБКУ В КОДЕ!
задание:Написать программу, которая бы рассчитывала значение выражения по формуле: (ln|cos(x)|)/(ln(1+x^2).
Мой код:
Program formula;
var
x:integer;
y:real;
begin
write('vvedute x ');
readln(x);
y:=(ln(abs(cos(x))))/ln(1+cos(x*x));
writeln('y=',y:5:2);
end.

почему то выдаёт ошибку. что не так?


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

а какую конкретно ошибку пишет?

0

какой х вы вводите?

0

у меня все работает корректно, по крайней мере ошибок не выдает

0

Для начала - у Вас в задании в знаменателе нет косинуса, а в программе он есть. Далее, вспоминаем, что косинус может обращаться в ноль при определенных значениях аргумента и ноль в качестве аргумента логарифма приведет к ошибке. Далее, есть варианты, когда под знаком логарифма окажется единица и это обратит логарифм в ноль. В исходной формуле логарифм есть в знаменателе, т.е. вариант деления на ноль тоже не исключен.

0

а как прописать эту проверку?у меня не получается. как только что-нибудь добавлю - программа не работает.

Дан 1 ответ
0 голосов
Правильный ответ

Program formula;
var
  x:integer;
  p,y:real;
begin
  Write('vvedute x<>0 ->');
  Readln(x);
  if x=0 then Writeln('x=0 nedopustimo')
  else begin
    p:= abs(cos(x));
    if p=0 then Writeln('ln(0) v 4islitele')
    else begin
      y:=ln(p)/ln(1+sqr(x*x));
      Writeln('y=',y:5:2)
    end
  end
end.

(142k баллов)