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

Глава 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