Циклы с условиями в Паскаль
Циклы с условием используются в тех случаях, когда число повторений цикла неизвестно к началу его выполнения. В языке Паскаль эти конструкции реализуются с помощью операторов while и repeat.
Цикл с предусловием. Оператор while
Оператор цикла while применяется в тех случаях, когда число повторений цикла заранее неизвестно и, действия, описанные в цикле, могут вообще не выполняться.
Оператор цикла while в Паскаль имеет следующий формат записи:
- while выражение do
- оператор;
Рассмотрим работу оператора цикла while.
- Вычисляется значение выражения (т. е. условие, стоящее после ключевого слова while), которое должно быть логическим выражением.
- Если результат вычисления выражения равен true (истина), то выполняется тело цикла (простой или составной оператор, расположенный после ключевого слова do). Затем, снова проверяется условие и т. д.
- Если результат равен false (ложь), то происходит выход из цикла и управление передается на первый оператор, следующий за циклом.
Задача. На вход программе поступает натуральное число. Определите количество разрядов в числе.
Решение. Будем на каждой итерации уменьшать число в 10 раз до тех пор, пока оно не станет равно 0. Количество итераций, в таком случае, будет равно числу разрядов в числе.
{Фрагмент кода программы}
- readln(num);
- while (num <> 0) do
- begin
- Inc(k);
- num := num div 10;
- end;
- writeln(k);
Цикл с постусловием. Оператор repeat
В языке программирования Паскаль есть еще один оператор цикла с условием, аналогичный по своему действию оператору while. Это оператор repeat, который имеет следующий формат записи:
- repeat
- тело цикла
- until выражение
Работа оператора цикла repeat происходит следующим образом:
- Выполняется последовательность операторов, заключенная между ключевыми словами repeat и until (поэтому тело цикла выполнится хотя бы один раз).
- Производится проверка продолжения цикла: если значение выражения, записанного после ключевого слова until, равно false (ложь), то тело цикла выполняется снова.
- Если значение выражения равно true (истина), то происходит выход из цикла.
Задача. На вход программе поступает последовательность целых чисел, заканчивающихся нулем. Найдите сумму чисел последовательности. Гарантируется, что в последовательности есть хотя бы одно число отличное от нуля.
Решение. Так как гарантируется наличие хотя бы одного числа отличного от нуля, то можно воспользоваться оператором цикла repeat (тело цикла обязательно выполнится хотя бы один раз)
{Фрагмент кода программы}
- s := 0;
- repeat
- readln (num);
- s += num;
- until num = 0;
- writeln(s);
Внимание: при программировании операторов тела цикла с условием необходимо предусмотреть влияние хотя бы одного из них на значение выражения, в противном случае цикл может выполняться бесконечно.