Оператор, который содержится в теле цикла for, выполняется один раз для каждого значения в диапазоне между начальным и конечным значением.
Управляющая переменная (Ид_переменной) должна иметь порядковый тип.
Значения выражения1(начальное значение) и выражения2(конечное значения) определяются один раз. Эти значения сохраняются на протяжении всего выполнения оператора for.
В результате вычисления выражения1и выражения2должны быть получены значения, тип которых совместим по присваиванию с управляющей переменной.
Когда в операторе цикла используется ключевое слово to, значение управляющей переменной увеличивается при каждом повторении цикла на единицу. Если в начале работы цикла начальное значение превышает конечное значение, то содержащийся в теле оператора for оператор не выполнятся.
Когда в операторе цикла используется ключевое слово downto, значение управляющей переменной уменьшается при каждом повторении на единицу. Если в начале работы такого цикла начальное значение меньше, чем конечное значение, то содержащийся в теле оператора цикла оператор не выполняется.
После выполнения оператора for значение управляющей переменной становится неопределенным.
Приведём эквивалентную схему оператора:
for V := Expr1 to Expr2 do Оператор;
из которой следуют все вышеприведённые замечания.
Temp1 := Expr1;
Temp2 := Expr2;
if Temp1 <= Temp2 then
while V <> Temp2 do
Следует обратить внимание на следующее:
Условием выхода из цикла является ложное значение выражения V <> Temp2,и если оператор, содержащийся в теле оператора for, изменяет значение управляющей переменной, то может возникнуть ситуация, когда значение переменной V никогда не станет равным значению Temp2, и цикл не сможет корректно завершиться.
Общая формулировка задач рекуррентного вычисления суммы или произведения конечного количества элементов выглядит следующим образом:
, или ,
где , т. е. последующее значение элемента А вычисляется на основе предыдущего его значения.
Кроме того, и вычисление суммы, или произведения, можно считать рекуррентным, поскольку следующее значение суммы, или произведения, вычисляется как:
.
Общую методологию решения подобных задач рассмотрим на следующем примере. Необходимо вычислить значение :
(1)
Вначале, для упрощения рекуррентной формулы вычисления элемента суммы, разобьём его на несколько частей (рис. 7).
Рисунок 7 – Разбиение элемента суммы формулы 1
Элемент можно вычислить без использования рекуррентной формулы, поэтому для него отдельной переменной не выделено.
Затем сведём в таблицу значения каждой из частей формулы при разных значениях переменной n (см. таблицу 6).
Таблица 6 – Изменения частей элемента суммы формулы 1
n
a
b
c
(x+1)4
3!=1*2*3
-1
(x+1)5
5!=1*2*3*4*5
(x+1)6
7!=1*2*3*4*5*6*7
Теперь, когда появилась возможность сравнить предыдущее значение части элемента суммы с его последующим значением, можно составить рекуррентные формулы:
Рассмотрим подробнее рекуррентное выражение для переменной с. Если обратиться к таблице 6, то можно заметить, что последующее значение переменной с получается домножением предыдущего значения на два числа. При n = 3 необходимо домножить на 4 и 5, при n = 4 необходимо домножить на 6 и 7.
Эти два числа определённым образом зависят от числа n. Второе из них соответствует формуле элемента суммы, связанного с переменной с - 2n-1 (см. рис. 7). Тогда первое число можно получить, отняв от числа 2n-1 единицу (поскольку это предыдущее целое число). Откуда и получаем значение 2n-2.
После составления рекуррентных формул можем перейти к составлению алгоритма и программы.
Следует обратить внимание на блок 3 (рис. 8), в котором инициализируются переменные a, b, c. В качестве начальных значений используем значения из первой строки таблицы 6 (при n = 2).
Теперь обратимся к блоку 4. Почему начальное и конечное значения цикла выбраны именно таким образом?
Дело в том, что в блоке 5 вначале выполняется вычисление следующего значения суммы (переменная S), а только затем, с помощью составленных ранее рекуррентных выражений, вычисляются следующие значения переменных a, b и c.
Новые значения переменных a, b и c должны вычисляться при n = 3 (следующее значение), а значение S при n = 2. И если цикл начнётся со значения n = 3, то следующие значения переменных a, b и c будут вычислены правильно, а выражение для вычисления S нужно будет изменить, уменьшив на единицу все вхождения в него переменной n (сравните формулы вычисления переменной S на рисунке 7 и в блоке 5 на рисунке 8).
Рисунок 8 – Блок-схема алгоритма вычисления
суммы конечного количества элементов
Кроме того, чтобы сохранить требуемое количество повторений тела цикла (k-2), увеличим конечное значение счетчика цикла на единицу. Таким образом, количество повторений будет равно: 3–(k+1) = k-2.
Теперь можно перейти к реализации алгоритма в исходном тексте программы на языке Pascal.