Лабораторная работа №14
ОРГАНИЗАЦИЯ ЦИКЛОВ
Цель работы: приобрести навыки в составлении циклических программ, изучить назначение и правила использования операторов цикла.
Краткие теоретические сведения
В своей практической деятельности человек постоянно сталкивается с задачами, при решении которых требуется многократно повторять одни и те же действия, для решения таких задач используется команды повторения (цикла).
Например. Пусть требуется определить остаток от деления числа М на число N (М и N — произвольные натуральные числа). Самый простой способ решения этой задачи заключается в следующем: проверяем, не меньше ли М, чем N (если М < N, то М и есть остаток от деления М на N); если М ³ N, то уменьшаем значение М на значение N (т.е. вычитаем из М число N и дальнейшие действия осуществляем с результатом этой операции, который для удобства мы снова обозначим М); снова проверяем, не стало ли М меньше N, если не стало, то еще раз уменьшаем значение М на величину значения N и т. д.
Эти две операции (сравнения и вычитания) повторяются до тех пор, пока очередное значение М не станет меньше значения N. Значение М в этот момент и будет остатком от деления заданных вначале чисел.
Как видно, в этом примере несколько раз повторяется одна и та же последовательность действий.
Компьютер может заданное число раз выполнить одни и те же действия с разными данными. Повторяющиеся действия в программировании называются циклом. Если изобразить цикл в виде блок-схемы, то получатся две разные структуры (рис. 5). Цикл не может выполняться вечно, в этом случае нарушается свойство алгоритма решить задачу за конечное число шагов. Цикл заканчивается по какому-либо условию. Проверка этого условия может производиться в начале каждого повторяющегося шага, в этом случае цикл называется пока. При проверке условия в конце каждого шага цикл называется до. Разновидностью цикла до является цикл пересчет.

Рис. 5. Циклические структуры
В цикле пока сначала проверяется условие, и если оно выполняется, т. е. логическое выражение истинно, то выполняется оператор и снова проверяется условие. Записанное в цикле пока условие является условием продолжения цикла. Как только оно перестанет выполняться, цикл завершится. На рисунке 5 выход из ромба «+» (или да) означает выполнение условия цикла, «—» (или нет) — невыполнение. Цикл пока не выполнится ни разу, если условие при входе в структуру оказалось ложным. Как правило, цикл пока содержит условие повторения, а цикл до — условие окончания работы цикла. Обе структуры имеют один вход и один выход. Однако цикл до всегда выполняется хотя бы один раз, потому что условие проверяется после выполнения действия. Это затрудняет проверку правильности программы, поэтому лучше использовать цикл пока. Оператор в цикле может быть простым или составным, заключенным в операторные скобки. В этом случае в цикле могут повторяться несколько операторов, а не один. Повторяющиеся в цикле операторы называются телом цикла. Циклы можно организовывать, используя различные средства Паскаля.
Оператор безусловного перехода. Этот оператор позволяет перейти без проверки условия либо на один из предыдущих операторов, либо на один из последующих, т. е. изменить порядок выполнения команд.
Общий вид оператора: goto n;
где п — целое число, не более чем из четырех цифр, называемое меткой. Метка появляется в программе три раза:
1) в описательной части в разделе Label;
2) в операторе goto;
3) перед оператором, на который осуществляется безусловный переход, в этом случае метка от оператора отделяется двоеточием.
Организация циклов с помощью операторов условного и безусловного переходов. Пусть требуется вычислить наибольший общий делитель двух натуральных чисел А и В. Воспользуемся алгоритмом Евклида: будем уменьшать каждый раз большее из чисел на величину меньшего до тех пор, пока оба числа не станут равны.
| Исходные данные | Первый шаг | Второй шаг | Третий шаг | НОД (А, В) = 5 |
| А =25 | А= 10 | А =10 | А=5 | |
| В= 15 | В=15 | В=5 | В=5 |
program P 5;
label 1,2;
var a, b: integer;
Begin
write (‘введите два натуральных числа’);
readln (a, b);
1: if a = b then goto 2;
if a > b then a: = a - b
else b: = b - a;
goto 1;
2: write (‘НОД = ‘, a);
readln;
End.
Оператор цикла пока. Циклический процесс можно организовать без использования специальных операторов. Но удобнее с операторами цикла пока, который имеет вид: while условие do оператор;
и выполняется следующим образом: оператор (тело цикла) повторяется до тех пор, пока выполняется условие (истинно логическое выражение). Оператор может быть простым или составным, заключенным в операторные скобки begin... end. Для алгоритма Евклида программа примет вид:
program P6;
var a, b: integer;
Begin
write (‘введите два натуральных числа’);
readln (а, b):
while a<>b do
if a>b then a: = a - b
else b: = b - a;
write (‘НОД = ‘, a);
readln;
End.
Оператор цикла до. Проверка условия в цикле до осуществляется после выполнения оператора. Если условие в цикле пока является условием продолжения повторений, то условие в цикле до — условием выхода из цикла, его завершением. Поэтому для одной и той же задачи эти условия противоположны. Общий вид оператора: repeat оператор until условие;
Между словами repeat (повторить) и until (до тех пор пока) можно записать любое количество операторов без использования операторных скобок. Перед словом until не ставится точка с запятой.
Программа нахождения наибольшего общего делителя примет вид:
program P7;
var a, b: integer;
Begin
write (‘введите два натуральных числа’);
readln (a, b);
Repeat
if a > b then a: = a - b;
if b > a then b: = b - a
until a = b;
write (‘НОД = ‘,a);






