Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
delphi / песни о паскале.pdf
Скачиваний:
66
Добавлен:
26.03.2016
Размер:
5.16 Mб
Скачать

Глава 12

Цикл с проверкой в конце

{ P_12_2 – вежливый часовой } var S : string;

begin

repeat

Writeln(’Пароль?’); Readln(S);

{ если строка не пуста, проверяем пароль } if S<>’’ then

if S = ’pascal’

then Writeln(’Проходите!’) else Writeln(’Стойте!’);

until S=’’;

Writeln(’До встречи! Нажмите Enter’); Readln;

end.

Я расположил операторы с надлежащими отступами, выделяющими структуру программы. Проверьте, работает ли она?

Досрочный выход из цикла

С какой бы стороны придраться к нашему часовому? Ведь программа делает всё, что положено. Но рассмотрим ещё один её вариант. Дело в том, что условные операторы внутри цикла порой загромождают и запутывают его. Это не относится к нашей теперешней программе, но мы ведь только в начале пути… Ждать ли, пока гром грянет? Или подготовиться к нему заранее? Познакомьтесь с процедурой по имени BREAK — «прервать» (боксерам знакомо это слово).

Условие завершения цикла, как вам известно, проверяется в точке UNTIL. Но порой это условие удобней проверить где-то в середине цикла, и тогда цикл лучше прервать досрочно, вызвав процедуру BREAK следующим образом:

if <условие_выхода_из_цикла> then Break;

Внимание: вызов процедуры BREAK допустим только внутри циклов!

Посмотрите, как изменится блок-схема с оператором BREAK (рис. 30), здесь оператор принятия решения я заменил пунктирным прямоугольником.

83

Глава 12

Цикл с проверкой в конце

 

Repeat

 

 

 

 

 

 

 

 

 

Запросить и ввести пароль

 

Завершить работу?

 

 

 

 

 

 

 

 

 

 

 

IF

 

Break

 

 

 

 

 

 

Да

 

 

 

 

 

 

 

 

Нет

 

 

 

 

 

 

 

 

 

Принять решение и вывести на

 

 

 

 

экран

 

 

 

 

 

 

 

 

 

Нет

Until

 

 

 

 

Да

Завершить

 

До встречи!

работу?

 

 

Рис. 30 – Блок-схема циклической программы с оператором Break

Согласно схеме, оператор BREAK передаст управление в точку, следующую за UNTIL. Применительно к нашей программе условие досрочного выхода из цикла будет таким.

if S=’’ then Break;

Слегка изменив предыдущую версию программы, я получил вариант, показанный ниже.

84

Глава 12

Цикл с проверкой в конце

{ P_12_3 – часовой с досрочным выходом из цикла } var S : string;

begin

repeat

Writeln(’Пароль?’); Readln(S);

{ если строка пуста, то выход из цикла } if S=’’ then Break;

if S = ’pascal’

then Writeln(’Проходите!’) else Writeln(’Стойте!’)

until S=’’;

Writeln(’До встречи! Нажмите Enter’); Readln;

end.

Досрочный выход из цикла упрощает программу, но пользоваться им надо аккуратно, с умом. Не забывайте, что после BREAK программа переходит к оператору, следующему за UNTIL.

Итоги

Оператор цикла REPEAT-UNTIL организует многократное повторение операторов, вставленных между этими ключевыми словами.

Условие выхода из цикла следует за ключевым словом UNTIL, цикл повторяется до тех пор, пока условие НЕ соблюдается.

Оператор BREAK выполняет досрочный выход из цикла с обходом условия в UNTIL.

Аслабо?

А) Сколько операторов можно вставить между REPEAT и UNTIL?

Б) Будет ли проверяться условие в UNTIL при досрочном выходе из цикла?

В) Возьмите за основу программу P_11_1 и переделайте ее в циклический вариант. Или слабо?

Г) Напишите программу для угадывания слова. Она должна запрашивать от пользователя строки, пока тот не введет слово, предусмотренное в программе.

85

Соседние файлы в папке delphi