Обучающие курсы:

Обучение профессии "Разработчик C#" + стажировка в Mail.ru
Обучение профессии "Разработчик Python" + трудоустройство
Обучение профессии "Веб-разработчик" + стажировка в Mail.ru


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Цикл с постусловием

Вторая разновидность цикла проверяет условие после выполнения тела цикла. Поэтому правильно будет назвать это условие условием окончания цикла. Цикл такого вида называется циклом с постусловием.

Цикл будет повторяться до тех пор, пока проверка этого условия будет давать результат «ложь» (false), то есть пока условие не выполнено. Даже если условие сразу окажется истинным, цикл выполнится хотя бы один раз.

 

Описание цикла с постусловием

Блок-схема в общем виде выглядит так (рис. 7.8):

Рис. 7.8. Блок-схема цикла с постусловием

Выполнение цикла продолжается, если проверка логического условия дает результат «ложь». Если логическое условие выполняется, то происходит выход из цикла. Иными словами, если в цикле while проверялось условие продолжения цикла, то в цикле repeat... until — условие окончания.

На языке Паскаль этот тип цикла реализуется так:

repeat
<тело цикла>
{ операторы begin ... end не требуются! }
until <логическое условие>

 

Использование циклов repeat и while

Рассмотрим задачу, в которой требуется вводить с клавиатуры числа и подсчитывать их сумму. Сумму необходимо подсчитывать до первого введенного отрицательного числа. Блок-схема алгоритма приведена на рис. 7,9.

 

Рис. 7.9. Блок-схема алгоритма подсчета суммы вводимых элементов до первого отрицательного числа на базе цикла с постусловием

 

Пример 7.3. Использование цикла repeat для подсчета суммы вводимых чисел до первого отрицательного числа

Program Summer1;
var
sum, a: real; { sum - для накопления суммы. а - для очередного числа }
begin
sum:=0; { Обнуляем сумму }
а:=0; { Это тактическая хитрость (см. замечание к примеру) }
repeat
sum:=sum+a; { Добавляем введенное число к сумме }
write('Введите число:'); { Ввод очередного числа }
readln(a)
until а<0; { Проверяем введенное число на отрицательность }
{ При выходе из цикла выполняется этот оператор: }
writeln('Сумма чисел=', sum:5:3);
readln
end.

 

Использование оператора repeat ... until оправдано тогда, когда нужны повторяющиеся действия, от выполнения которых зависит дальнейшее продолжение цикла. Так, в приведенном примере продолжение цикла зависит от введенного числа. Если сразу введено отрицательное число, его не нужно добавлять к сумме. Если число неотрицательное, то нужно добавить его к сумме и продолжить выполнение цикла. Если перевести вышесказанное буквально на язык блок-схем, алгоритм должен выглядеть так (рис. 7.10):

Рис. 7.10. Блок-схема алгоритма подсчета суммы вводимых элементов до первого отрицательного числа с выходом из цикла в середине тела цикла

 

Однако этот пример цикла нельзя отнести к циклам с пред- или постусловием.
Здесь условие окончания цикла находится в середине.

Хитрость примера 7.3 состоит в том, чтобы выполнить оператор S:=S+A до проверки условия окончания цикла и не нарушить правильности алгоритма. Ведь если поставить S:=S+A после ввода переменной А, то введенное отрицательное число добавится к сумме, чего быть не должно.

А если поставить его перед вводом переменной А, то что же тогда прибавится к сумме во время первого шага цикла? Ведь переменная А еще не введена! Изначально присвоив переменной А нулевое значение, мы решаем эту проблему.

 

Вы скажете: если repeat здесь использовать неудобно, не лучше ли использовать while?
Давайте посмотрим, какую программу придется написать в этом случае, и сравним получившиеся два варианта:

Пример 7.4. Использование цикла while для подсчета суммы вводимых чисел до первого отрицательного числа

var
sum. a: real;
begin
sum:=0; { Обнуляем сумму }
write('Введите число:') ; { Ввод первого числа }
readln(a) ; { Так как мы собираемся проверять переменную А до начала цикла, ей необходимо присвоить начальное значение }
while а>=0 do { Проверяем введенное число на отрицательность }
begin
sum:=sum+a; { Добавляем введенное число к сумме }
write('Введите число:'); { Ввод очередного числа }
readln(a)
end;
{ При выходе из цикла выполняется этот оператор: }
writeln('Сумма чисел=', sum:5:3);
readln
end.

 

Необходимость задать начальное значение переменной А вынуждает нас повторить операторы ввода переменной А дважды — до цикла и внутри него. С этой точки зрения использование while оказывается менее удобным.




 

Комментарии:

2013-02-08 ответил артпатри

роапол



2013-03-10 ответил Азамат Мирзаянов

Я молодец!



2013-04-08 ответил Асадуллин Тимур

Ты хуй а не молодец!



2013-12-09 ответил Гоша

идите программируйте



2014-12-22 ответил Мефодий

лососните тунца, вафли



2014-12-24 ответил Аркадий

Да



2015-01-21 ответил Дрек

спасибо большое очень помогло...



2015-03-05 ответил Йа

Луууулз^^



2015-04-08 ответил Демьян

В школе непонятно ничего,тут хоть чуть-чуть



2015-05-27 ответил И-ф

Вот почему в школе нельзя так же нормально объяснить как тут Учитель козлина зелёная



2015-06-25 ответил ((((

Я ниче не понимаю...(((((



2015-12-09 ответил котак бас

вы суки ебаный все



2015-12-09 ответил праститутка

кто меня хочет 1 руб час



2015-12-09 ответил Диггер

Лол, мерга,праститутка



2015-12-09 ответил хуесос

вы хуесосы



2016-01-13 ответил тимочес

вы педики чпоканные мне все понятно ,а нет ничего не понятно , а вм ничего не понять азазазазазазазаазазазазза мамку чпокал итвою ыыыыыыыыыыыыыыыыыыыыыыыыыыыыы



2016-01-13 ответил РОМА ОРОБЕц г

аааааа



2016-01-18 ответил падла

нихуя не понятно, идите смотрите гей порно



2016-01-18 ответил ыфыыыыыыыыыыыыыы

ыыыыыыыыыыыыыы



2016-05-31 ответил slander

че за хуйня



2016-12-12 ответил Аноним

Мне уже известны нюансы алгоритма цикла. Мне нужен конкретный пример такого алгоритма! А не это убожество...



2016-12-19 ответил тимочесу

Вот ты дебииил



2016-12-19 ответил тимочесу

Вот ты дебииил



2017-02-13 ответил Дима Уткин

кРЯ



2017-03-11 ответил Сережка Шамов

Вы все пидоры ебаные, в рот ебал эту информатику. Я рэпер и мне похуй



2017-03-23 ответил Адам

Привет, я милый котик. Ребята, будьте умнее, перестаньте материться в комментариях, не проявляйте свою умственную неполноценность.



2017-04-24 ответил топовый padjee

мне пох я здесь спавнюсь сосатт америка



2017-04-24 ответил топ поцык

изи бля прграмисты топ пуджы гавнно азазазазаза кс топ мне 9 лет и я пргрмммммист



2017-04-24 ответил артем

я сосу члены



2017-05-26 ответил виток зэк

соси хуй



2017-10-29 ответил



2018-04-16 ответил




Добавить свой комментарий:


Введите значение:
 









   
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru