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

После выполнения цикла значение параметра цикла считается неопределенным, поэтому в предыдущем примере нельзя полагаться на то, что значение переменной I равно 10 при выходе из цикла.

Вторая форма записи оператора for обеспечивает перебор значений параметра цикла не по возрастанию, а по убыванию:

for <параметр цикла> := <значение 1> downto <значение 2> do <оператор>;

Например, в результате выполнения следующей программы на экран будут выведены значения параметра цикла в порядке убывания (от 10 до 1):

program Console;

{$APPTYPE CONSOLE}

uses SysUtils;

var

I: Integer;

begin

for I := 10 downto 1 do Writeln(I); Writeln('Press Enter to exit...'); Readln;

end.

Если в такой записи оператора for начальное значение параметра цикла меньше конечного значения, цикл не выполнится ни разу.

2.7.9. Оператор повтора repeat

Оператор повтора repeat используют в тех случаях, когда тело цикла должно быть выполнено перед тем, как произойдет проверка условия завершения цикла. Он имеет следующий формат:

repeat <оператор 1>;

...

<оператор N>;

until <условие завершения цикла>;

Тело цикла выполняется до тех пор, пока условие завершения цикла (выражение булевского типа) не станет истинным. Оператор repeat имеет две характерные особенности, о которых нужно всегда помнить:

73

между словами repeat и until может находиться произвольное число операторов без операторных скобок begin и end;

так как условие завершения цикла проверяется после выполнения операторов, цикл выполняется, по крайней мере, один раз.

Вследующем примере показано, как оператор repeat применяется для суммирования вводимых с клавиатуры чисел. Суммирование прекращается, когда пользователь вводит число 0:

program Console;

{$APPTYPE CONSOLE}

uses SysUtils;

var

S, X: Integer;

begin

S := 0; repeat

Readln(X);

S := S + X; until X = 0; Writeln('S=', S);

Writeln('Press Enter to exit...'); Readln;

end.

Часто бывает, что условие выполнения цикла нужно проверять перед каждым повторением тела цикла. В этом случае применяется оператор while, который, в отличие от оператора repeat, содержит условие выполнения цикла, а не условие завершения.

2.7.10. Оператор повтора while

Оператор повтора while имеет следующий формат:

while <условие> do <оператор>;

Перед каждым выполнением тела цикла происходит проверка условия. Если оно истинно, цикл выполняется и условие вычисляется заново; если оно ложно, происходит выход из цикла, т.е. переход к следующему за циклом оператору. Если первоначально условие ложно, то тело цикла не выполняется ни разу. Следующий пример показывает использование

74

оператора while для вычисления суммы S = 1 + 2 + .. + N, где число N задается пользователем с клавиатуры:

program Console;

{$APPTYPE CONSOLE}

uses SysUtils;

var

S, N: Integer;

begin Readln(N); S := 0;

while N > 0 do begin

S := S + N;

N := N - 1; end; Writeln('S=', S);

Writeln('Press Enter to exit...'); Readln;

end.

2.7.11. Прямая передача управления в операторах повтора

Для управления работой операторов повтора используются специальные процедуры-операторы Continue и Break, которые можно вызывать только в теле цикла.

Процедура-оператор Continue немедленно передает управление оператору проверки условия, пропуская оставшуюся часть цикла (рисунок 2.4):

Рисунок 2.4. Схема работы процедуры-оператора Continue

Процедура-оператор Break прерывает выполнение цикла и передает управление первому оператору, расположенному за блоком цикла (рисунок

2.5):

75

Рисунок 2.5. Схема работы процедуры-оператора Break

2.7.12. Оператор безусловного перехода

Среди операторов языка Delphi существует один редкий оператор, о котором авторы сперва хотели умолчать, но так и не решились. Это оператор безусловного перехода goto ("перейти к"). Он задумывался для того случая, когда после выполнения некоторого оператора надо выполнить не следующий по порядку, а какой-либо другой, отмеченный меткой, оператор.

Метка — это именованная точка в программе, в которую можно передать управление. Перед употреблением метка должна быть описана. Раздел описания меток начинается зарезервированным словом label, за которым следуют имена меток, разделенные запятыми. За последним именем ставится точка с запятой. Типичный пример описания меток:

label

Label1, Label2;

В разделе операторов метка записывается с двоеточием. Переход на метку выполняется с помощью зарезервированного слова goto, за которым следует имя метки:

program Console;

{$APPTYPE CONSOLE}

uses SysUtils;

label M1, M2;

begin M1:

Write('Желаем успеха '); goto M2;

Write('А этого сообщения вы никогда не увидите!'); M2:

goto M1;

Writeln('в освоении среды Delphi!');

76

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]