Если цикл включает в себя один или несколько циклов, то содержащий внутри себя другие циклы называется внешним, а цикл, содержащийся в другом цикле вложенным.При программировании вложенных циклов необходимо выполнить правило: внутренний оператор цикла и принадлежащая ему область действия должны полностью содержаться внутри области внешнего цикла, таким образом внешний цикл всегда начинается раньше, а заканчивается позже, чем внутренний. Блок – схема вложенного цикла представлена на Рисунок 18.4 – Блок-схема, соответствующая вложенному циклу.
При решении некоторых задач возникает потребность в организации вложенных циклов. Например, при анализе двумерного массива требуется выполнять цикл как по первому, так и по второму измерениям. В таких случаях используют вложенные циклы. Процедура Break и Continue всегда воздействуют только на ближайший оператор цикла, поэтому прекратить выполнение всех циклов с их помощью невозможно.
Например, требуется написать программу, которая печатает все целые числа, сумма квадратов которых равна заданному числу, которые последовательно перебирают все возможные значения, а в теле внутреннего цикла проверяется, не равна ли сумма квадратов значений счетчиков заданной величине.
Пример использования:
var i, j, n: integer;
begin
Readln(n);
for i:=1 to n div 2 do
for j:=1 to n div 2 do
if i*i + j*j = n then
Writeln(i, ‘,’, j);
end;
В каждом из циклов рассматривается диапазон значений от 1 до половины величины введенного числа (потому что сумма квадратов половин числа заведомо больше или равна этому числу). Можно найти дополнительные способы улучшить этот код, в частности, вынести вычисленные произведения i*i из тела вложенного цикла, потому что это произведение не имеет смысла многократно вычислять во вложенном цикле, где оно всегда будет иметь одно и то же значение, а операция умножения для процессора достаточно медленная.
или
for i := 1 to n do
for j := 1 to n do
Рисунок 17.4 – Блок-схема, соответствующая вложенному циклу