Все, что необходимо начинающему и опытному программисту
Цикл с постусловием
Вторая разновидность цикла проверяет условие после выполнения тела цикла. Поэтому правильно будет назвать это условие условием окончания цикла. Цикл такого вида называется циклом с постусловием.
Цикл будет повторяться до тех пор, пока проверка этого условия будет давать результат «ложь» (false), то есть пока условие не выполнено. Даже если условие сразу окажется истинным, цикл выполнится хотя бы один раз.
Описание цикла с постусловием
Блок-схема в общем виде выглядит так (рис. 7.8):
Рис. 7.8. Блок-схема цикла с постусловием
Выполнение цикла продолжается, если проверка логического условия дает результат «ложь». Если логическое условие выполняется, то происходит выход из цикла. Иными словами, если в цикле while проверялось условие продолжения цикла, то в цикле repeat. until — условие окончания.
На языке Паскаль этот тип цикла реализуется так:
Использование циклов repeat и while
Цикл с постусловием | Pascal
Рассмотрим задачу, в которой требуется вводить с клавиатуры числа и подсчитывать их сумму. Сумму необходимо подсчитывать до первого введенного отрицательного числа. Блок-схема алгоритма приведена на рис. 7,9.
Рис. 7.9. Блок-схема алгоритма подсчета суммы вводимых элементов до первого отрицательного числа на базе цикла с постусловием
Пример 7.3. Использование цикла repeat для подсчета суммы вводимых чисел до первого отрицательного числа
Использование оператора repeat . until оправдано тогда, когда нужны повторяющиеся действия, от выполнения которых зависит дальнейшее продолжение цикла. Так, в приведенном примере продолжение цикла зависит от введенного числа. Если сразу введено отрицательное число, его не нужно добавлять к сумме. Если число неотрицательное, то нужно добавить его к сумме и продолжить выполнение цикла. Если перевести вышесказанное буквально на язык блок-схем, алгоритм должен выглядеть так (рис. 7.10):
Рис. 7.10. Блок-схема алгоритма подсчета суммы вводимых элементов до первого отрицательного числа с выходом из цикла в середине тела цикла
Однако этот пример цикла нельзя отнести к циклам с пред- или постусловием.
Здесь условие окончания цикла находится в середине.
Хитрость примера 7.3 состоит в том, чтобы выполнить оператор S:=S+A до проверки условия окончания цикла и не нарушить правильности алгоритма. Ведь если поставить S:=S+A после ввода переменной А, то введенное отрицательное число добавится к сумме, чего быть не должно.
А если поставить его перед вводом переменной А, то что же тогда прибавится к сумме во время первого шага цикла? Ведь переменная А еще не введена! Изначально присвоив переменной А нулевое значение, мы решаем эту проблему.
Вы скажете: если repeat здесь использовать неудобно, не лучше ли использовать while?
Давайте посмотрим, какую программу придется написать в этом случае, и сравним получившиеся два варианта:
Пример 7.4. Использование цикла while для подсчета суммы вводимых чисел до первого отрицательного числа
Цикл с постусловием | Информатика Паскаль #16 | Инфоурок
Необходимость задать начальное значение переменной А вынуждает нас повторить операторы ввода переменной А дважды — до цикла и внутри него. С этой точки зрения использование while оказывается менее удобным.
2013-02-08 ответил артпатри
Источник: www.programmer-lib.ru
Цикл с постусловием
Блок схема алгоритма цикла с постусловием показана на рис. 21.2.
Рис. 21.2. Блок-схема алгоритма цикла с постусловием.
Как видно из схемы, сначала выполняется код, который находится в теле цикла. Затем проверяется условие. Если условие выполняется, то цикл завершается. Если условие НЕ выполняется, то программа начинает новую итерацию цикла.
Например, вывести несколько одинаковых строк на экран можно так:
i := 1; Повторять Начало Вывести(‘Привет, МИР ’, i); i := i + 1; Конец; Если i < 10;
Как вы думаете, сколько строк выведет эта программа? А вот и не угадали. Всего одну.
Почему? Потому что это цикл с постусловием. Здесь СНАЧАЛА выполняется итерация цикла, а затем проверяется условие. И если условие выполняется, то цикл завершается. А в нашем случае условие выполняется, так как i изначально меньше 10.
Поэтому цикл с постусловием сразу завершается.
Ещё одна особенность цикла с постусловием заключается в том, что цикл выполняется как минимум один раз, потому что условие проверяется в конце, после выполнения кода, который находится в теле цикла.
А теперь посмотрим, как этот цикл реализовать в Паскале.
var i : byte; begin i := 1; repeat WriteLn(‘Привет, МИР ‘, i); Inc(i); until i > 10; ReadLn; end.
Как видите, здесь мы проверяем уже другое условие, то есть мы проверяем, не стало ли значение индексной переменной больше 10. Поэтому данный пример выведет строку на экран 10 раз. Сами подумайте, почему.
ВАЖНО!
Обратите внимание, что мы не используем слова begin и end, чтобы как-то обозначить тело цикла. Дело в том, что слова repeat и until сами являются операторными скобками, поэтому слова begin и end здесь использовать необязательно. Хотя и не запрещено.
- Прерывание и продолжение циклов
- Использование циклов в программе КАЛЬКУЛЯТОР
Домашнее задание:
Проверьте работу цикла с постусловием на практике. Усвойте отличия между циклом с предусловием, и циклом с постусловием.
Источник: info-master.su
9. Оператор цикла. Циклы с предусловием и постусловием
Циклический вычислительный процесс (ЦВП) характеризуется повторением одних и тех же вычислений над некоторым набором данных. Числом повторений цикла управляет специальная переменная, называемая его счетчикомилиуправляющей переменной цикла. На счетчик накладывается условие, определяющее, до каких пор следует выполнять цикл.
Повторяемый блок вычислений называют теломцикла. В теле цикла должно быть обеспеченоизменение значения счетчика, чтобы он мог завершиться. Если тело цикла состоит более, чем из одного оператора, онозаключается в операторные скобкиbegin . end;. Однократное выполнение тела цикла называют егошагом.
Таким образом, для программирования цикла достаточно определить условие, управляющее числом его повторений и описать операторы, образующие тело цикла. С этой точки зрения, теоретически возможны всего два вида циклов – проверка условия либо предшествует выполнению тела цикла, либо происходит после него. Изобразим эти циклы в виде блок-схем с соответствующими описаниями:
Цикл с предусловием: сначала проверяется условие, затем, в зависимости от того, истинно оно или ложно, либо выполняется тело цикла, либо следует переход к оператору, следующему за телом цикла. После завершения тела цикла управление вновь передается на проверку условия. Естественно, предполагается, что в теле цикла было обеспечено некоторое изменение входящих в условие переменных – в противном случае произойдетзацикливаниеи программа «зависнет».
Цикл с постусловием: сначала выполняется тело цикла, затем управление передается на проверку условия. В зависимости от истинности или ложности условия, тело цикла выполняется повторно или же происходит переход к оператору, следующему за телом цикла. Всё, сказанное о возможном зацикливании для цикла с предусловием, справедливо и для цикла с постусловием.
Исходя из приведенных блок-схем, очевидно основное различие двух циклов: цикл с постусловием гарантированно выполняется хотя бы раз, а цикл с предусловием может не выполняться ни разу, если условие сразу же окажется ложным.
В языке Паскаль реализованы оба вида циклов. Цикл с предусловием имеет следующий общий вид:
while логическое_выражение do begin
Работу цикла можно описать словами: «пока логическое выражение истинно, повторяется тело цикла».
Логическое выражение строится по правилам, изученным в главе 7. Тело цикла могут образовывать любые операторы Паскаля. Если в теле цикла всего один оператор, операторные скобки можно и не писать.
Общая запись цикла с постусловием следующая:
Работает цикл с постусловием следующим образом: «тело цикла повторяется до тех пор, пока логическое выражение не станет истинным». Обратите внимание, что, в отличие отwhile, циклrepeatв Паскале работает, пока условиеложно. Это отличие подчеркивается использованием ключевого словаuntil(«до тех пор, покане») вместоwhile(«до тех пор, пока»). Кроме того, в виде исключения, тело циклаrepeat, даже если оно состоит из нескольких операторов, можнонезаключать в операторные скобки.
Довольно часто циклы взаимозаменяемы. Представим, например, что для каждого из значений переменной x=1,2,…,20, нужно выполнить некоторый расчет (математически этот закон измененияxможно записать какили
). Покажем общий вид цикловwhileиrepeat:
Как видно из листинга, управляющей переменной xв обоих случаях присвоено начальное значение1, оба цикла изменяют значениеxи, соответственно, условие цикла, операторомx:=x+1;, но для циклаrepeatусловие «перевернуто» («покаxне станет больше20»), а тело не заключено в операторные скобки.
Зачастую использование одного из циклов выглядит предпочтительней. Например, обработка ввода пользователя с клавиатуры удобней с помощью repeat(сначала пользователь должен нажать клавишу, затем следуют проверки и обработка).
Источник: studfile.net