В своей практической деятельности человек постоянно сталкивается с задачами, при решении которых требуется многократно повторять одни и те же действия. Для составления алгоритмов решения таких задач используются команды повторения (цикла).
Рассмотрим следующий пример. Пусть требуется определить остаток от деления числа М на число N (М и N — произвольные натуральные числа). Самый простой способ решения этой задачи заключается в следующем: проверяем, не меньше ли М, чем N (если М < N, то М и есть остаток от деления М на N); если М ≥ N, то уменьшаем значение М на значение N (т. е. вычитаем из М число N и дальнейшие действия осуществляем с результатом этой операции, который для удобства мы снова обозначим М); снова проверяем, не стало ли М меньше N, если не стало, то еще раз уменьшаем значение М на величину значения N и т. д.
Эти две операции (сравнения и вычитания) повторяются до тех пор, пока очередное значение М не станет меньше значения N. Значение М в этот момент и будет остатком от деления заданных вначале чисел.
Как видно, в этом примере несколько раз повторяется одна и та же последовательность действий.
Компьютер может заданное число раз выполнить одни и те же действия с разными данными. Повторяющиеся действия в программировании называются циклом. Если изобразить цикл в виде блок-схемы, то получатся две разные структуры (рис. 34). Цикл не может выполняться вечно, в этом случае нарушается свойство алгоритма решить задачу за конечное число шагов. Цикл заканчивается по какому-либо условию. Проверка этого условия может производиться в начале каждого повторяющегося шага, в этом случае цикл называется пока.При проверке условия в конце каждого шага цикл называется до.Разновидностью цикла доявляется цикл пересчет.
99
Цикл до
Цикл пока
Рис. 34. Циклические структуры
В цикле покасначала проверяется условие, и если оно выполняется, т. е. логическое выражение истинно, то выполняется оператор и снова проверяется условие. Записанное в цикле покаусловие является условием продолжения цикла. Как только оно перестанет выполняться, цикл завершится. На рисунке 34 выход из ромба «+» (или да) означает выполнение условия цикла, «—» (или нет)— невыполнение. Цикл покане выполнится ни разу, если условие при входе в структуру оказалось ложным. Как правило, цикл покасодержит условие повторения, а цикл до — условие окончания работы цикла. Обе структуры имеют один вход и один выход. Однако цикл довсегда выполняется хотя бы один раз, потому что условие проверяется после выполнения действия. Это затрудняет проверку правильности программы, поэтому лучше использовать цикл пока.Оператор в цикле может быть простым или составным, заключенным в операторные скобки. В этом случае в цикле могут повторяться несколько операторов, а не один. Повторяющиеся в цикле операторы называются телом цикла.
Циклы можно организовывать, используя различные средства языка Паскаль.
Оператор безусловного перехода.Этот оператор позволяет перейти без проверки условия либо на один из предыдущих операторов, либо на один из последующих, т. е. изменить порядок выполнения команд. Общий вид оператора:
goto n;
где п — целое число, не более чем из четырех цифр, называемое меткой. Метка появляется в программе три раза: 1) в описательной части в разделе Label; 2) в операторе goto;3) перед оператором, на который осуществляется безусловный переход, в этом случае метка от оператора отделяется двоеточием.
Организация циклов с помощью операторов условного и безусловного переходов.Пусть требуется вычислить наибольший общий делитель двух натуральных чисел А и В. Воспользуемся алгоритмом Евклида: будем уменьшать каждый раз большее из чисел на величину меньшего до тех пор, пока оба числа не станут равны.
Исходные данные
Первый шаг
Второй шаг
Третий шаг
НОД(А,В)=5
А=25
А=10
А=10
А=5
В=15
В=15
В=5
В=5
programE5;
label1,2;
var a, b: integer;
Begin
write('введите два натуральных числа');
readln(a, b); 1:
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.Для алгоритма Евклида программа примет вид: