Внутри алгоритма циклической структуры может быть помещен другой цикл – вложенный (внутренний) цикл. Можно повторять много раз выполнение другого цикла. Вложенный цикл может быть один, но может быть и несколько вложенных циклов. Второй вложен в первый, третий – во второй и т.дЦиклы, вложены друг в друга, как "матрешки".
Цикл, содержащий в себе другой цикл, называют внешним циклом.
А цикл, содержащийся в теле другого цикла, называют внутренним циклом.
Внешние и внутренние циклы могут быть:
- с предусловием while
- с постусловием repeat
- с параметром (счетчиком) for
!Все операторы внутреннего цикла должны располагаться в теле внешнего цикла.!
For <счетчик 1>:=<начальное знач.> To <конечное знач.> Do <тело цикла 1>;
For <счетчик 2>:=<начальное знач.> To <конечное знач.> Do <тело цикла 2>;
…
For <счетчик n>:=<начальное знач.> To <конечное знач.> Do <тело цикла n>;
…
For <счетчик n>:=<начальное знач.> To <конечное знач.> Do <тело цикла n>;
Так цикл 2 относительно цикла 1 является внутренним, а для цикла n он внешний.
Принцип работы вложенных циклов заключается в следующем. Сначала один раз выполняется цикл, идущий первым в программе, затем управление передается следующему циклу (№2), и если после него нет никаких других циклов, то он прокручивается до конца и снова единожды выполняется внешний цикл, иначе, если после цикла №2 стоит еще один вложенный цикл, то №2 выполняется один раз, передавая управление циклу идущему после него. Такой алгоритм продолжается до тех пор, пока самый внешний цикл не выполниться необходимое количество раз.
ПРИМЕР:
Задание: напечатать числа в виде следующей таблицы
3 3 3 3 3
3 3 3 3 3
3 3 3 3 3
3 3 3 3 3
Данная таблица состоит из четырех строчек, в каждой из которых число 3 напечатано 5 раз. Строчку из пяти чисел можно напечатать с помощью одного цикла for:
for i:=1 to 5 do write(3, ' ');
Чтобы повторить вывод строчки 4 раза, вставляем этот цикл внутрь другого:
for k:=1 to 4 do {4 раза делаем то, что написано между begin’ом и end’ом} begin for i:=1 to 5 do write(3, ' '); {Выводим одну строку} writeln; {Переводим курсор на следующую строку} end;


Отправить комментарий