Если телом цикла является циклическая структура, то такие циклы называют вложенными. Цикл, содержащий в себе другой цикл, называют внешним, а цикл, содержащийся в теле другого цикла, называют внутренним. Внешний и внутренний циклы могут быть трех видов: циклами с предусловием while, циклами с постусловием repeat или циклами с параметром for.
Правила организации внешнего и внутреннего циклов такие же, как и для простого цикла каждого из видов. Но при программировании вложенных циклов необходимо соблюдать следующее дополнительное условие: все операторы внутреннего цикла должны полностью располагаться в теле внешнего цикла.
Рассмотрим пример простой задачи, решение которой предполагает использование вложенных циклов, — задачи вывода на экран таблицы умножения. С использованием цикла for вариант решения данной задачи может быть следующим:
program Tab__Umn1;
var
I,J : byte;
begin
for I:=1 to 10 do {Внешний цикл}
for J:=1 to 10 do {Внутренний цикл}
Writeln (I, ' * ', J, ' = ', I*J); {Тело внутреннего цикла}
end.
Проанализируем действие данной программы. В разделе описания переменных описываются переменные I, J целого типа byte, выполняющие функции управляющих переменных циклов for.
Выполнение программы начинается с внешнего цикла. При первом обращении к оператору внешнего цикла for вычисляются значения начального (1) и конечного (10) парамет-ров цикла и управляющей переменной I присваивается начальное значение 1.
Затем циклически выполняется следующее:
1. Проверяется условие 1<= 10.
2. Если оно соблюдается, то выполняется оператор в теле цикла, т. е. выполня-ется внутренний цикл.
2.1. При первом обращении к оператору внутреннего цикла for вычисляются значения начального (1) и конечного (10) параметров цикла и управляющей переменной J присваивается начальное значение 1.
Затем циклически выполняется следующее:
2.2. Проверяется условие J<=10.
2.3. Если оно удовлетворяется, то выполняется оператор в теле цикла, т. е. оператор Writeln (I, ' * ', J, ' = ', I*J), выводящий на экран строку табли-цы ум¬ножения в соответствии с текущими значениями переменных I и J.
2.4. Затем значение управляющей внутреннего цикла J увеличивается на единицу и оператор внутреннего цикла for проверяет условие J<=10. Если условие соблюдается, то выполняется тело внутреннего цикла при неизменном значении управляющей переменной внешнего цикла до тех пор, пока выполняется условие J<= 10.
Если условие J<=10 не удовлетворяется, т. е. как только J станет больше 10, оператор тела цикла не выполняется, внутренний цикл завершается и управление в программе передается за пределы оператора for внутреннего цикла, т. е. на оператор for внешнего цикла.
3. Значение параметра цикла I увеличивается на единицу, и проверяется условие 1<=10. Если условие 1<=10 не соблюдается, т. е. как только I станет больше 10, оператор тела цикла не выполняется, внешний цикл завершается и управление в программе передается за пределы оператора for внешнего цикла, т. е. на оператор end, и программа завершает работу.
Таким образом, на примере печати таблицы умножения наглядно видно, что при вложении циклов изменение управляющей переменной вложенного цикла проходит полный цикл от начального до конечного значения при неизменном значении управляющей переменной внешнего цикла, затем значение управляющей переменной внешнего цикла изменяется на единицу и опять изменение параметра внутреннего цикла претерпевает изменения от начального до конечного значения с шагом, равным единице. И так до тех пор, пока значение параметра внешнего цикла не станет больше конечного значения, определенного в операторе for внешнего цикла. |