|
Любой из приведенных выше примеров можно переписать, используя вместо элемента вида арифметической прогрессии элемент итерационного вида. Например, программу вычисления суммы 1 + 1/2 + ... + \1п можно составить так: begin real s; integer i, n\ ввод (n); s : =0; i: =0\ for i: ==i+l while i^n do s: = s + 1/i; вывод (s) end Для поиска максимального элемента массива и и определения номера этого элемента, можно прибегнуть к операторам i: = & : = /; у: = и [Л; for = i +1 while i ^ n do if и [i] > у then begin k: = i; у : = ы [i] end Однако чаще к элементу итерационного вида прибегают, когда ни одна из переменных не изменяется в цикле по арифметической прогрессии, а число повторений цикла заранее не известно. Например, пусть даны числа х и у, такие, что х > у > 0 и требуется найти их арифметико-геометрическое среднее z — общий предел двух последовательностей хъ х29 ... и уъ у2, где = ух = у% Xi+1=^±yLt Ум = УъУь i-1,2,... (1) Пусть заданное число е > 0 определяет требуемую точность вычисления г. Тогда вычисления по формулам (1) можно прекратить, как только разность х} — yt станет меньше или равна 8. На Алголе этот процесс можно описать программой begin real х, у, z, eps\ ввод (х, у, ер$)\ for z : = х — у while z > eps do begin z: = (x + y)/2; y:=sqrt (xxy); x: = z end; вывод (у) end В общем случае, когда список цикла состоит из нескольких элементов, параметр цикла должен принимать все значения, предписываемые каждым из элементов. Так, например, программа begin real s; integer i, n\ ввод (я); s:=0; for f:=7, while i =<: n do s: = s + l/i; вывод (s) end также может служить для вычисления суммы 1 + 1/2 + ... + 1/п Заголовок for *': = >, 2, 3 do предписывает выполнить тело цикла для явно указанных в этом заголовке значений параметра i. Он записывается заметно проще эквивалентного ему заголовка for i: = l step 1 until 3 do Для заголовка for x: = l, 2, 5, 10 do невозможно найти никакой разумный эквивалент с элементами вида арифметической прогрессии или итерационного вида.
|