Главная
Исходники
Вычисления
Работа со строками
Маленькие хитрости
Рекурсия
Работа с графикой
Работа с массивами
Работа с файлами
Работа с записями
Динамические структуры данных
Методы сортировок
Фракталы
Литература
Теория вероятностей
Видео уроки
Ссылки
ОднаКнопка

Web www.pascal.hop.ru

Лабораторная работа 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