Командой повторения или циклом называется такая форма организации действий, при которой одна и та же последовательность действий повторяется до тех пор, пока сохраняется значение некоторого логического выражения.
При изменении значения логического выражения на противоположное повторения прекращаются (цикл завершается).
Для организации цикла необходимо выполнить следующие действия:
- перед началом цикла задать начальное значение параметра;
- внутри цикла изменять параметр цикла с помощью оператора присваивания;
- проверять условие повторения или окончания цикла;
- управлять циклом, т.е. переходить к его началу, если он не закончен, или выходить из цикла в противном случае.
Различают циклы с известным числом повторений (цикл с параметром) и итерационные (с предусловием и постусловием).
Оператор цикла с параметром
Данный оператор применяют тогда, когда известно число повторений одного и того же действия.
Начальное и конечное значения параметра цикла могут быть представлены константами, переменными или арифметическим выражениями.
Оператор имеет две формы:
- For параметр := a to b do тело цикла;
- For параметр := a downto b do тело цикла;
где a и b - величины целого типа, причем а - начальное значение, а b - конечное значение переменой - параметра.
Сначала вычисляются значения выражений а и b. Если а окажется меньшим или равным b, то параметр последовательно принимает значения, равные а, а+1, …, b-1, b, и для каждого из этих значений выполняется тело цикла. Если же а>b, то тело цикла не будет выполнено ни разу, и управление будет передано следующему оператору программы.
Оператор
For параметр := a downto b do тело цикла;
выполняется аналогичным образом, но параметр принимает значения, равные а, а-1, …, b+1, b. Если тело цикла состоит из нескольких операторов, то операторы тела цикла заключаются в операторные скобки begin - end. Например:
|
For x: =1 to 10 do writeln (x);
For i: =10 to 100 do y: =y+5;
|
Оператор while
Данный оператор используется для программирования циклических процессов, в которых число повторений неизвестно, но задается некоторое условие его окончания.
Оператор имеет вид:
While условие do тело цикла;
Работа оператора начинается с проверки условия, записанного после слова while.
Если это условие соблюдается, то выполняется тело цикла, а затем вновь проверяется условие и т. д.
Как только на очередн6ом шаге окажется, что условие не соблюдается, то выполнение тела цикла прекратится.
Если тело цикла состоит из нескольких операторов, то они объединяются операторными скобками.
В теле цикла обязательно должен быть оператор, влияющий на соблюдение условия, в противном случае произойдет зацикливание.
Оператор repeat
Для программной реализации циклических процессов с неизвестным числом повторений существует еще один оператор, который имеет вид:
Repeat
тело цикла
Until условие;
Данный оператор аналогично предыдущему оператору цикла, но отличается от него тем, что проверка условия проводится после очередного выполнения тела цикла.
Это обеспечивает его выполнение хотя бы один раз.
Сначала выполняется последовательность операторов, входивших в тело цикла, после чего проверяется выполнение условия, записанного за служебным словом until.
Если условие не соблюдается, цикл завершается.
В противном случае тело цикла повторяется еще раз, после чего проверяется соблюдение условия.
Естественно, тело цикла должно содержать оператор, влияющий на условие окончания (продолжения), иначе цикл будет бесконечным.
В качестве примера рассмотрим задачу планирования закупки товаров в магазине на определенную сумму, не превышающую заданной величины.
Обозначим через c и k соответственно цену и количество товара, через p - заданную предельную сумму, через s - общую стоимость покупки.
Начальное значение общей стоимости покупки (s) равно нулю.
Значение предельной суммы (p) должно вводиться с клавиатуры.
Необходимо повторять запрос о цене и количестве выбранного товара, вычислять его стоимость, суммировать ее с общей стоимостью и выводить результат на экран до тех пор, пока s не превысит предельную сумму p.
В таком случае на экран можно вывести сообщение о превышении предельного значения.
Решение этой задачи можно записать в виде следующей программы:
|
Program pr2;
Var c, k, p, s: integer;
Begin
Writeln ('Предельная сумма - '); readln (p);
s: = 0;
Repeat
Writeln ('Введите цену товара и его количество');
Readln (c, k);
s: s+c*k;
Writeln ('Стоимость покупки равна', s);
Until s>p;
Writeln ('Общая стоимость покупки превысила предельную сумму');
Readln;
End.
|