Цикл с постпроверкой условия
Тема: Разработка, отладка и испытание циклических алгоритмов и программ.
Цель работы:
1. Изучить структуру каждого из операторов организации цикла REPEAT, WHILE, FOR ( различия между ними). Научиться их обозначать на блок-схемах.
2. Овладеть практическими навыками разработки, программирования циклических вычислительных процессов.
3. Овладеть практическими навыками разработки алгоритмов и программ с использованием вложенных циклов.
Программное обеспечение: Pascal (TP или BP), или ABCPascal, или FreePascal.
Аппаратное обеспечение: ЭВМ типа IBM.
Порядок выполнения работы
- Записать тему и цель лабораторной работы.
- Ознакомиться с краткими теоретическими сведениями по теме лабораторной работы.
- Ответить на контрольные вопросы (ответы на контрольные вопросы оформить в отчет).
- Выполнить практическую часть работы.
Задание №1_ВЫВОД ФИО в цикле (3 способа реализации задачи). Ко всем 3-м способам разрабатываем блок-схемы.
Задание №2_Вычислить значение суммы ряда (использовать оператор цикла For). Блок-схема не нужна.
Задание №3_Вычислить значение функции на отрезке (2 способа реализации задачи с использованием оператора цикла while и repeat). Ко всем способам разрабатываем блок-схемы.
Задание №4_ -Заставка к фильму «Матрица с дополнительными условиями».
Задание №5_Задача на использование вложенных циклов (решаем одну любую из предложенных задач)
К одной любой задаче№4 или №5 разрабатываем блок-схему. Обязательно нужно решить хотя бы одну задачу с использованием вложенных циклов.
- Защитить работу и сдать ее преподавателю.
Контрольные вопросы
- Какой алгоритм является алгоритмом циклической структуры? Что такое параметр цикла?
- Опишите отличительные особенности операторов организации циклов For, repeat и while. ( Какой цикл выполнится по крайней мере один раз? Какой цикл может не выполниться ни разу? Ответ поясните. Какой цикл в Паскале является циклом с параметром? Какой оператор цикла является оператором цикла с предусловием и постусловием в языке Паскаль.? В чем их принципиальное отличие? )
3. Сколько раз будет выполнено тело цикла в следующих фрагментах программ:
a) For k =-1 То 1 Do ... b) For =10 To 20 Do . . c) For k =20 To 10 Do … d) k:=5; r:=15; For i =k+l To r-1 Do …
4. Определить значение переменной s после выполнения следующих операторов:
s:=0; n:=10; For i:=2 To n Do s:=s+100 div i;
5. Что такое вложенные циклы? Опишите правила использования вложенных циклов. Приведите пример вложенных циклов.
6. Опишите назначение операторов Break и continue. Приведите примеры их использования. В чем состоит принципиальная разница в их использовании?
7. Что будет выведено на экране монитора после выполнения следующего фрагмента программы:
7.1 | 7.2 | 7.3 | 7.4 | 7.5 |
При выполнении следующей программы пользователь ввел числа 1, 20, 17, 6, 10, 13. readln(x); m:=x; while x<>13 do begin readln(x); if x>m then m:=x; end; writeln(m); | b := 0; a:=10; Repeat b := b*10 +a; a := a Div 2; until (a>3) Write(b); Сколько раз здесь будет выполнено тело цикла? | s:=1; for i:=1 to 5 do if i>2 then s:=s*i; writeln(s); | a := 1; b := 1; For i := 0 To n Do Begin For j := 1 To b Do Write('*'); Writeln; c := a + b; a := b; b := c; End; если n = 6? Решение какой задачи выражает этот фрагмент программы? | x:=1; y:=2; for i:=1 to 3 do while x<i*3 do begin x:=x+y; y:=y+1; end; |
Краткие теоретические сведения
Алгоритм циклической структуры - это алгоритм, в котором происходит многократное повторение одного и того же участка программы. Такие повторяемые участки вычислительного процесса называются циклами. Программа циклической структуры содержит один или несколько циклов. Различают детерминированные циклы с заранее известным числом повторений и итерационные циклы, в которых число повторений заранее неизвестно. Изменяющаяся в цикле переменная называется параметром цикла.
Для организации цикла необходимо выполнить следующие действия:
1) задать перед циклом начальное значение параметра цикла;
2) изменять параметр перед каждым новым повторением цикла;
3) проверять условие повторения цикла;
4) управлять циклом, т.е. переходить к его началу, если он не закончен, или выходить из него по окончании.
В языке Паскаль существует 3 вида циклов:
1) цикл с параметром или цикл типа for,
2) цикл с предусловием или цикл типа while,
3) цикл с постусловием или цикл типа repeat ... until.
Оператор цикла с параметром
Блок-схема, соответствующая циклу с параметром, представлена на рис. 1.
Здесь i – параметр цикла; i0 – начальное значение параметра; iT – конечное значение параметра; iS – шаг приращения параметра (в случае языка Pascal +1 либо –1).
Циклическая ветвь блок-схемы выполняется для всех i, начиная с i0 и кончая iT с шагом iS (т.е. для i0 , i0+iS , i0+2iS , i0+3iS , … ). Как только i выйдет за пределыинтервала [i0 ,iT], повторения прерываются и программа выходит из цикла.
Рис. 1 Блок-схема цикла с параметром
Оператор цикла с параметром на языке Pascal имеет следующий формат:
For i:=i0 to iT do <оператор>
Здесь For, to, do – зарезервированные слова («для», «до», «выполнить»);
i (параметр цикла) - переменная типа INTEGER (точнее, в общем случае, любого порядкового типа);
i0 (начальное значение) и iT (конечное значение параметра) – константы или выражения того же типа;
<оператор> - произвольный оператор языка Pascal (тело цикла). В качестве оператора может выступать расширенный оператор с операторными скобками begin…end.
Шаг приращения параметра при этом постоянен и равняется +1.
При выполнении оператора For вначале вычисляется выражение i0 и выполняется присваивание i:=i0 . После этого циклически повторяется:
- проверка условия i<= iT ; если условие не выполнено, то оператор For прекращает свою работу;
-выполнение тела цикла <оператор>;
-наращивание переменной цикла на единицу.
Если условие не выполняется в самом начале работы оператора For, то исполняемый оператор не будет выполнен ни разу.
Существует и другая форма записи оператора For, при которой шаг приращения параметра принимает значение –1. В этом случае оператор For будет иметь следующий вид:
For i:=i0 downto iT do <оператор>
Пример 1. Вычислить функцию f=x+e -x при х=0, 1, 2, …, 10 и распечатать полученные значения в табличном виде.
Возможный текст программы:
Цикл с предпроверкой условия
Оператор цикла с предпроверкой условия While…Do схематично представлен в виде блок-схемы на рис.2 и имеет следующий формат:
While <условие> Do <оператор>
Здесь While, Do – зарезервированные слова («Пока [выполняется условие]», «делать»);
<условие> - выражение логического типа;
<оператор> -произвольный оператор, составляющий тело цикла (включая случай расширенного оператора).
Если условие имеет значение “Истинно” (True), то выполняется <оператор>,после чего проверка условия повторяется. Если условие имеет значение “Ложь” (False), то оператор While прекращает свою работу.
Рис.2 Блок-схема цикла с предпроверкой условия
Данный оператор может быть использован в тех случаях, когда заранее не известно предстоящее число повторений.
Пример 2. Дан бесконечный ряд вида
Найти сумму данного бесконечного ряда с заданной точностью e=0.01, т.е. продолжать процесс суммирования до тех пор, пока модуль разности между суммами для k-го и (k+1)-го шага не станет меньше e.
Цикл с постпроверкой условия
Оператор цикла с постпроверкой условия имеет следующий формат:
Repeat <тело цикла> Until <условие>
Здесь Repeat, Until – зарезервированные слова («Повторять», «пока не [выполнится условие]»);
<тело цикла> - произвольная последовательность операторов;
<условие> - выражение логического типа.
Операторы тела цикла всегда выполняются хотя бы один раз, после чего вычисляется значение <условие>: если его значение ложно (FALSE), операторы тела цикла повторяются, в противном случае оператор Repeat завершает свою работу.
Блок-схема данного оператора представлена на рис. 3.
Рис. 3 Блок-схема цикла с постпроверкой условия
Пример 3.Дано натуральное число N>10. Найти первую цифру данного числа.
Отметим отличия и особенности хорошего стиля работы с рассмотренными циклическими операторами.
Цикл с предусловием While (пока условие истинно) | Цикл с постусловием Repeat (до истинности условия) |
1. До начала цикла должны быть сделаны начальные установки переменных, управляющих условием цикла, для корректного входа в цикл | |
2. В теле цикла должны присутствовать операторы, изменяющие переменные условия так, чтобы цикл через некоторое число итераций завершился | |
3. Цикл работает пока условие истинно (пока True) | 3. Цикл работает пока условие ложно (пока False) |
4. Цикл завершается, когда условие становится ложным (до False) | 4. Цикл завершается, когда условие становится истинным (до True) |
5. Цикл может не выполниться ни разу, если исходное значение условия при входе в цикл False | 5. Цикл обязательно выполнится как минимум один раз |
6. Если в теле цикла требуется выполнить более одного оператора, то необходимо использовать составной оператор | 6. Независимо от количества операторов в теле цикла, использование составного оператора не требуется |
Цикл со счетчиком (с параметром) For | |
· Начальная установка переменной счетчика цикла до заголовка не требуется | |
· Изменение в теле цикла значений переменных, стоящих в заголовке не допускается | |
· Количество итераций цикла неизменно и точно определяется значениями нижней и верхней границ и шага приращения | |
· Нормальный ход работы цикла может быть нарушен оператором goto или процедурами Break и Continue | |
· Цикл может не выполниться ни разу, если шаг цикла будет изменять значение счетчика от нижней границы в направлении, противоположном верхней границе |
Вложенные циклы
В реальной жизни мы часто встречаем ситуации, когда один цикл вложен внутрь другого. Например, смена месяцев (когда пройдет 12 месяцев - сменится год), смена дней (когда пройдет 30 дней - сменится месяц), смена суток (когда пройдет 24 часа - сменится день), смена часов (когда пройдет 60 минут - сменится час) и т.д. Как запрограммировать данную ситуацию? Существует такая структура – цикл в цикле. Называется она “вложенные циклы”.
Оператор, который выполняется в цикле, сам может быть циклом. Это относится ко всем видам циклов. В результате мы получаем вложенные циклы.
Механизм работы вложенных циклов удобнее всего рассмотреть на примере вложенных циклов с параметром. Пусть нам нужно описать работу электронных часов, начиная с момента времени 0 часов, 0 минут, 0 секунд. Значение минут станет равным 1 только после того, как секунды «пробегут» все последовательные значения от 0 до 59. Часы изменят свое значение на 1 только после того, как минуты «пробегут» все последовательные значения от 0 до 59. Таким образом, вывод всех значений времени от начала суток до конца суток может быть представлен следующим фрагментом программы:
For h:=0 to 23 do
For m:=0 to 59 do
For s:=0 to 59 do
Writeln(h,’:’,m,’:’,s);
Внутренний и внешний циклы могут быть любыми из трёх рассмотренных ранее видов: циклами с параметром, циклами с предусловием или циклами с постусловием. Правила организации как внешнего, так и внутреннего циклов такие же, как и для простого цикла каждого из этих видов. Но при использовании вложенных циклов необходимо соблюдать следующее условие: внутренний цикл должен полностью укладываться в циклическую часть внешнего цикла.
Необходимо подчеркнуть, что при организации вложенных циклов необходимо соблюдать следующее условие: внутренний цикл должен полностью укладываться во внешний, т.е. изменение внешнего цикла происходит только тогда, когда полностью отработает внутренний цикл.