Цикл с постпроверкой условия

Тема: Разработка, отладка и испытание циклических алгоритмов и программ.

Цель работы:

1. Изучить структуру каждого из операторов организации цикла REPEAT, WHILE, FOR ( различия между ними). Научиться их обозначать на блок-схемах.

2. Овладеть практическими навыками разработки, программирования циклических вычислительных процессов.

3. Овладеть практическими навыками разработки алгоритмов и программ с использованием вложенных циклов.

Программное обеспечение: Pascal (TP или BP), или ABCPascal, или FreePascal.

Аппаратное обеспечение: ЭВМ типа IBM.

Порядок выполнения работы

  1. Записать тему и цель лабораторной работы.
  2. Ознакомиться с краткими теоретическими сведениями по теме лабораторной работы.
  3. Ответить на контрольные вопросы (ответы на контрольные вопросы оформить в отчет).
  4. Выполнить практическую часть работы.

Задание №1_ВЫВОД ФИО в цикле (3 способа реализации задачи). Ко всем 3-м способам разрабатываем блок-схемы.

Задание №2_Вычислить значение суммы ряда (использовать оператор цикла For). Блок-схема не нужна.

Задание №3_Вычислить значение функции на отрезке (2 способа реализации задачи с использованием оператора цикла while и repeat). Ко всем способам разрабатываем блок-схемы.

Задание №4_ -Заставка к фильму «Матрица с дополнительными условиями».

Задание №5_Задача на использование вложенных циклов (решаем одну любую из предложенных задач)

К одной любой задаче№4 или №5 разрабатываем блок-схему. Обязательно нужно решить хотя бы одну задачу с использованием вложенных циклов.

  1. Защитить работу и сдать ее преподавателю.

Контрольные вопросы

  1. Какой алгоритм является алгоритмом циклической структуры? Что такое параметр цикла?
  2. Опишите отличительные особенности операторов организации циклов 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);

Внутренний и внешний циклы могут быть любыми из трёх рассмотренных ранее видов: циклами с параметром, циклами с предусловием или циклами с постусловием. Правила организации как внешнего, так и внутреннего циклов такие же, как и для простого цикла каждого из этих видов. Но при использовании вложенных циклов необходимо соблюдать следующее условие: внутренний цикл должен полностью укладываться в циклическую часть внешнего цикла.

Необходимо подчеркнуть, что при организации вложенных циклов необходимо соблюдать следующее условие: внутренний цикл должен полностью укладываться во внешний, т.е. изменение внешнего цикла происходит только тогда, когда полностью отработает внутренний цикл.