Лабораторная работа 52
Вычислить:
Разберём эту задачу. Самая простая операция, как видно, находится в самом конце формулы. В самой её глубине. Для её вычисления ничего более знать не надо, кроме x, который известен заранее.
Считаем, очень внимательно, с калькулятором. Оказывается sin(99x), при любом x даёт отрицательный результат. То есть такое число не подходит для нахождения корня. Это или недоработка преподавателя или проверка на сообразительность, такое случается сплошь и рядом. Для такого случая есть замечательная функция – модуль или абсолютное значение. На Pascal пишется ABS.
Выбираясь из глубин формулы, на один шаг вверх наблюдаем за её изменением. Видно, что аргумент синуса изменился следующим образом (по сравнению с предыдущим вычислением):
- постоянный коэффициент уменьшился с 99 на 98;
- к заданному заранее x прибавили результат наших более ранних вычислений;
Кроме того, замечаем, что так изменяется формула на всём своём протяжении, до тех пор, пока постоянный коэффициент в скобках у синуса не уменьшится до 1.
Само собой напрашивается цикл с уменьшением переменной цикла.
FOR . . . DOWNTO . . . DO
Обратимся ещё раз к формуле. Обозначим самое простое и самое глубокое выражение любой буквой, например N.
N := SQRT(ABS(SIN(99*x)))
Выражение, чуть выше этого запишется так:
SQRT(ABS(SIN(98*(x+N))))
Здесь SQRT – квадратный корень от английского square root
Эти формулы очень похожи, за исключением того, что в первой нет результата предварительных вычислений N. Значит с лёгкостью можно представить, что N всё-таки есть, только N=0. Следовательно, можно приступать к программированию:
Var I : Integer;
X, N : Real;
Begin
X := 0.98;
N := 0;
For I := 99 DownTo 1 Do
Begin
N := SQRT(ABS(SIN(I*(X+N))));
End;
WriteLn('X= ',X:3:3 , ' Y= ', N:3:3);
End.
Пахтусов Сергей, 03.03.2006 |