Тема урока "Порядок выполнения вложенных циклов"
Сегодня на уроке вы:
повторите вложенные циклы, принципы их работы;
закрепите умения решать задачи с вложенными циклами.
Внутри алгоритма циклической структуры может быть помещен другой цикл – вложенный (внутренний) цикл. Можно повторять много раз выполнение другого цикла. Вложенный цикл может быть один, но может быть и несколько вложенных циклов. Второй вложен в первый, третий – во второй и т.д
Циклы, вложены друг в друга, как "матрешки".
Цикл, содержащий в себе другой цикл, называют внешним циклом.
А цикл, содержащийся в теле другого цикла, называют внутренним циклом.
Внешние и внутренние циклы могут быть:
с предусловием while
с постусловием repeat
с параметром (счетчиком) for
!Все операторы внутреннего цикла должны располагаться в теле внешнего цикла!
Принцип работы вложенных циклов заключается в следующем. Сначала один раз выполняется цикл, идущий первым в программе, затем управление передается следующему циклу (№2), и если после него нет никаких других циклов, то он прокручивается до конца и снова единожды выполняется внешний цикл, иначе, если после цикла №2 стоит еще один вложенный цикл, то №2 выполняется один раз, передавая управление циклу идущему после него. Такой алгоритм продолжается до тех пор, пока самый внешний цикл не выполниться необходимое количество раз.
ПРИМЕР 1.
Задание: напечатать числа в виде следующей таблицы
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;
ПРИМЕР 2.
Задание: написать программу, которая выводила бы на экран таблицу умножения.
Результат программы может быть такой:
Для составления такой программы оптимально использовать вложенный цикл (цикл в цикле). Применим такой алгоритм для решения задачи о таблице умножения.
Переменная i принимает значение 1, а внутренняя переменная j принимает не одно значение, а несколько по очереди: от 1 до 10.
На следующем шаге i принимает значение 2, по тому же алгоритму j «пробегает» от 1 до 10 и т.д.
ПРИМЕР 3.
Задание: Пользователь вводит целые положительные числа, большие 5. Пока он не введёт число 22 в ответ на каждое введённое число выводите все целые числа от 1 до этого числа, если же пользователь ввёл ноль, то объявите о завершении работы программы.
Прокомментируем это решение:
В качестве внешнего цикла мы выбрали repeat/until, чтобы проверять условие уже после ввода значения пользователем.
В качестве внутреннего цикла мы выбрали for -- ведь каждый раз будет известно число, до которого надо выводить меньшие числа. Можно было бы использовать и любой другой цикл, но for в таких случаях использовать грамотнее и красивее.
минусом выбора repeat/until внешним циклом является то, что эта программа, в случае если пользователь введёт число 22, все равно выведет ряд чисел, а только потом завершится.
Этот же пример, но с циклом For, который вложен в While:
Как работает эта программа:
Сначала, ещё до цикла мы просим пользователя ввести число первый раз, если это число = 22, то цикл вообще не начнётся и программа будет завершена без вывода ряда.
Если пользователь вводит число не равное 22, то цикл начнётся, так как число уже известно, то в витке цикла мы сначала выведем значения до введённого числа, а только потом в конце витка запросим очередное число.
Выполни задания
Повтори § 22.
Выполни в своей тетради - составь программу:
Пользователь вводит первое целое число-ограничитель m. А затем начинает вводить целые числа по одному, пока не введёт число большее числа-ограничителя. Если очередное целое число больше 1, то в ответ на каждое такое число программа должна выводить все целые числа от единицы до этого числа.
Примечание: это задача на вложенные циклы, в качестве внешнего надо использовать while, а в качестве внутреннего можно использовать или for, или while.