Гуру паскаля и математики, вопрос к вам: в чем трабл программы? При любом значении выдает минус бесконечность. program one; var x, y, a, b, c: real; begin write('Введите x: '); readln(x); write('Введите y: '); readln(y); if (x>0) and (x<>-4) then begin a:= y-sqr(abs(x)); b:= x-y/(x+sqr(x)/4); c:= ln(abs(a*c)); write('ответ: '); writeln(c); end else // если данное, введенное пользователем, не удовлетворяет ограничению writeln('Нет решений'); end.
Математика:
Подкоренное выражение всегда больше либо равно нулю.
Так как у нас модуль, то в этой части примера решение есть при всех x (модуль убирает минус).
Далее, дробь.
Знаменатель должен быть не равен нулю.
a)
b)
Получается, математические ограничение для х:
Так, с математикой разобрались.
Информатика:
if (x<>0) and (x<>-4) then в 9 строчке
sqr - это возведение в квадрат
sqrt - квадратный корень
(от англ. слов square и square root)
То есть:
a:=y-sqrt(abs(x)); в 11 строчке
И ошибка в 13 строчке:
c:=ln(abs(a*b));
(было c:=ln(abs(a*c);)
Собственно, минус бесконечность выдавало именно из-за ошибки в 13 строчке.
Умножали a на c.
Так как с не было определенно, то c=0.
А значит a*c=0.
Натуральный логарифм от нуля равен минус бесконечности.
Готово!