Учебник Turbo Pascal. Введение - Вычисление квадратного корня из числа методом Герона
ОГЛАВЛЕНИЕ
Вычисление квадратного корня из числа методом Герона
В программе geron_sqrt, предназначенной для вычисления квадратного корня из числа (в данном примере из двойки) методом Герона, используется подпрограмма-функция дегоп. Метод Герона — это метод последовательных приближений. Если задано число а и из него требуется приближенно вычислить квадратный корень, то вначале выбирается произвольное начальное приближение x0. Затем задается точность вычислений е > 0 и строится последовательность хn+1 = (хn + а / хn) / 2. Вычисления прекращаются при выполнении условия |xn+1 - хn| < е.
Алгоритму Герона можно придать следующий геометрический смысл (рис. 1.2). Изобразим график функции у = х2 и проведем прямую у = а. Если в точке (хn, хn2) провести касательную, то ее пересечение с прямой у - а даст значение хn+1. Обозначая (дельта)х = хn - xn+1 и (дельта)у = хn2 - а, получаем (дельта)y / (дельта)х - tg а. По формулам дифференциального исчисления tg а = dy / dх = 2хn, поэтому (хn2 - а)/(хn - хn+1) = 2хn, откуда и получается формула алгоритма Герона.
Рис. 1.2. Геометрическая иллюстрация алгоритма Герона
Цикл while в подпрограмме-функции дегоп выполняется до тех пор, пока не нарушится заданное в нем условие (неравенство). Невозможно заранее предугадать, когда это произойдет, и, следовательно, в такой ситуации цикл for был бы бесполезен. Подпрограмма дегоп вызывается в операторе WriteLn. Такой вызов функции в операторе вывода допускается. Во втором операторе вывода содержится обращение к встроенной функции вычисления квадратного корня. Таким образом, можно сравнить оба результата.
Листинг 1.9. Вычисление квадратного корня методом Герона
{$N+}
program geron_sqrt;
function geron(x: Real): Extended;
const
eps = 1.0E-100;
var
y, z: Real;
begin
y := 1.0;
{Цикл while выполняется до тех пор. пока, не будет достигнута
заданная точность вычисления квадратного корня}
while Abs(z - у) >= eps do
begin
z := у;
y := (y + x / у) / 2;
end;
geron := у;
end;
begin
WriteLn( 'Алгоритм Герона для вычисления квадратного корня из двойки:');
WriteLn('Geron(2.0) =', geron(2.0));
WriteLn('Sqrt(2.0) =', Sqrt(2.0));
Write('Нажмите <Enter>');
ReadLn;
end.
В подпрограмме-функции geron в условии оператора цикла while...do... используется функция вычисления абсолютного значения Abs. Здесь же мы встречаемся с отношением нестрогого неравенства. При программировании логических отношений в Паскале используются четыре специальных символа для обозначения строгих и нестрогих неравенств: <, >, <= и >=. Отношение неравенства программируется при помощи пары символов <>.
ПРИМЕЧАНИЕ Функция geron имеет свой собственный набор описаний — константы eps и переменных у, z. Эти величины локальны по отношению к geron, они «невидимы» из других процедур.