Циклы могут быть простыми или вложенными (цикл в цикле).
Например:
Program VCicl;
var i,j:integer;
begin
for i:=1 to 5 do
begin
writeln;
for j:=10 to 13 do
write('i=',i,' j=',j);
end;
readln;
end.
Для цикла for i:=1 to 5 do телом цикла является:
begin for j:=10 to 13 do
write(' i= ', i, ', j = ', j);
writeln;
end;
Этот цикл является внешним, по отношению к нему внутренним будет цикл:
for j:=10 to 13 doс телом write (' i = ', i, j =', j);
Разберём работу программы, с вложенным циклом.
Сначала программа и начинает выполнять внешний цикл: присваивает i=l, затем переходит к его телу, а здесь встречает внутренний цикл и присваивает j значение 10, после чего выполняет тело внутреннего цикла, т.е. выводит на экран i=l, j=10. Так как внутренний цикл еще не окончен, то машина продолжает его выполнять, т.е. присваивает j значение 11 и добавляет к уже выведенной строке i=l, j=11.
Заметим, что оператор writeотличается от оператора writeln тем, что он не начинает вывод с новой строки, а продолжает писать в той же строке, т.е. после второго выполнения внутреннего цикла на экране появится
i= 1, j=10 i= 1, j=11.
Программа продолжит выполнение внутреннего цикла, и, когда он закончится (выполнится для j = 10,11,12,13), на экране будет строка
|
|
i = 1 j = 10 i =l j = 11 i = 1 j = 12 i = 1 j = 13.
Внутренний цикл закончится, однако тело внешнего цикла еще не закончи-лось, поэтому выполняется оператор writeln, который переводит курсор на новую строку. После этого тело внешнего цикла закончится, но сам цикл отработал только для i = 1. Поэтому внешний цикл продолжит работу, присвоив i: =2 и вновь начав выполнение своего тела. Встретив внутренний цикл j, на экран с новой строки выведется: i=2, j=10, затем к этой строке добавится i=2, j=11 и т.д., пока не закончится внутренний цикл.
Таким образом, внешний цикл, изменяя индекс i от 1 до 5, заставит каждый раз выполняться полностью внутренний цикл, и в результате работы программы на экране появится:
i=l, j=10 i=1, j=11 i=1, j=12 i=1, j=13
i=2, j=10 i=1, j=11 i=1, j=12 i=1, j=13
i=3, j=10 i=1, j=11 i=1, j=12 i=1, j=13
i=4, j=10 i=1, j=11 i=1, j=12 i=1, j=13
i=5, j=10 i=1, j=11 i=1, j=12 i=1, j=13
Вкладывать циклы друг в друга можно сколько угодно раз, необходимо лишь помнить, что количество выполнений самого внутреннего тела цикла при этом будет расти в геометрической прогрессии. Например:
for i:=l to 9 do
for j:=l to 9 do
for k:=l to 9 do
writeln (i, j, k);
дает столбик цифр:
111 112 113 114 … 119
– – – – –
121 122 123 124 … 129
– – – – –
211 212 213 214 … 219
– – – – –
991 992 993 994 … 999
что составляет 1000 строчек.