- •2.4.4 Листинг программы
- •Общая часть
- •Основы программирования. Работа в консольном режиме Паскаль
- •Операторы языка Паскаль
- •Оператор ввода/вывода
- •Условный оператор
- •Оператор присваивания
- •Оператор выбора
- •Оператор выбора case
- •Операторы цикла
- •Множества
- •Перечисляемый тип данных
- •Диапазонный тип данных
- •Цикл с параметром
- •Вложенные циклы
- •Прерывание и продолжение цикла
- •Операторы цикла интерационного типа
- •Операторы цикла итерационного типа: с предусловием
- •Операторы цикла итерационного типа: с постусловием
Вложенные циклы
Циклы позволяют повторять выполнение любого набора операторов. В частности можно повторять много раз выполнение другого цикла. Такие циклы называются вложенными.
Пример 1. Напечатать числа в виде следующей таблицы
3 3 3 3 3
3 3 3 3 3
3 3 3 3 3
3 3 3 3 3
Данная таблица состоит из четырех строчек, в каждой из которых число 3 напечатано 5 раз. Строчку из пяти чисел можно напечатать с помощью одного цикла for:
fori:=1to5do write(3, ' '); |
Чтобы повторить вывод строчки 4 раза, вставляем этот цикл внутрь другого:
fork:=1to4do {4 раза делаем то, что написано между begin’ом и end’ом} begin fori:=1to5do write(3, ' '); {Выводимоднустроку} writeln; {Переводим курсор на следующую строку} end; |
Типичная ошибка, когда в качестве счетчиков вложенных циклов (i и k в приведенном примере) используется одна и та же переменная. То есть нельзя в каждом из циклов использовать одну переменную i. Помнить об этом особенно важно, поскольку данная ошибка не обнаруживается на этапе компиляции. Ваша программа запустится, но делать будет вовсе не то, что вы от нее ждете. В приведенном примере (если допустить ошибку, заменив переменную k на i) внешний цикл выполнится всего 1 раз вместо 4-х. Возможна также ситуация, когда такая ошибка приведет к зацикливанию: внешний цикл будет выполняться бесконечно долго
Прерывание и продолжение цикла
Иногда бывают случаи , когда нам неизвестно , сколько конкретно шагов цикла необходимо для выполнения условия задачи. Конечно ,мы можем подождать , пока цикл завершится полностью , но это нерационально , да и в некоторых случаях недопустимо вовсе. Тогда логично возникает вопрос :"Как выйти из цикла?" . Для этого в паскале есть три оператора , функции которых - прервать текущий цикл / шаг цикла. Итак знакомьтесь - это оператор break ,оператор continue и оператор goto . А теперь о каждом в отдельности Оператор break Этот оператор необходим для полного выхода из цикла. То есть если в цикле встретился оператор break - цикл прерывается сразу . Приведу пример. Имеем массив, состоящий из 10 чисел ( 4 1 3 2 6 8 9 10 11 2 ) . Сколько чисел можно сложить , чтобы их сумма была меньше Сложение начинаем с начала массива. То есть происходило сложение чисел до тех пор , пока их сумма была меньше 20 . Как Вы видите, было сделано 5 шагов цикла. То есть после пятого шага был задействован оператор break и произошелвыход из цикла. Оператор continue Оператор также обеспечивает прерывание, но не цикла ,а шага цикла. То есть если в цикле встретился оператор continue - происходит прерывание текущего шага цикла и выполняется переход к следующему шагу. Разберем на примере . Пусть у нас есть список работников на предприятии. Каждый месяц подсчитывается их средняя трудовая активность и на основе этого решается вопрос о выдаче премии . Размер премии зависит от трудовой активности , а необходимая трудовая активность для получения премии 95%. Необходимо составить статистику за один месяц на 10 рабочих . Все данные вводятся с клавиатуры. Напишем простенькую программу , использую цикл,условие и оператор continue Вобьем произвольные данные. Пусть это будут фамилии Петров , Сидоров , Васечкин, Корненко, Усманов . Забьем также данные по активности работы и премиям. Имеем на выходе
Что мы видим? Очередность ввода такая : имя , активность , премия . Причем следует заметить , что если при вводе активность оказалась ниже 95% , то ввода премии просто не происходит (действует оператор continue) . Шаг цикла заканчивается и происходит переход к следующему шагу. Оператор goto Оператор goto отличается двух предыдущих тем, что его применение гораздо шире . Если операторы break и continue используются только в цикле , то оператор goto можно использовать во всем теле программы. Суть заключается в том, что в каком-нибудь месте ставится метка и, если в процессе выполнения компилятор встретит ссылку на метку - он вернется к метке . Таким образом компиляция продолжает выполняться с уже пройденного этапа. Теперь как применять goto в паскале. Необходимо сделать три вещи : объявить метку , установить метку , поставить ссылку на метку . Здесь есть только один момент . Объявление метки происходит до var (до объявление обычных переменных), используя label т.к. переменная особая . Все же остальное происходит уже в теле цикла.
