Лабораторная работа №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);






