×
Traktatov.net » Описание языка PascalABC.NET » Читать онлайн
Страница 37 из 252 Настройки
называется параметром цикла. Для первой формы цикла с ключевым словом to параметр цикла меняется от начального значения до конечного значения, увеличиваясь всякий раз на единицу, а для второй формы ключевым словом downto - уменьшаясь на единицу. Для каждого значения переменной-параметра выполняется тело цикла. Однократное повторение тела цикла называется итерацией цикла. Значение параметра цикла после завершения цикла считается неопределенным.

Переменная-параметр цикла может иметь любой порядковый тип. При этом начальное и конечное значения должны быть совместимы по присваиванию с переменной-параметром цикла.

Например:

var en: (red,green,blue,white);

...

for en := red to blue do

write(Ord(en):2);

forvar c := 'a' to 'z' do

write(c);

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

Если цикл используется в подпрограмме, то переменная-параметр цикла должна быть описана как локальная. Наилучшим решением в PascalABC.NET является описание переменной в заголовке цикла.

Изменение переменной-параметра цикла внутри цикла является логической ошибкой. Например, следующий фрагмент со вложенным оператором for является ошибочным:

for i := 1 to 10 do

i -= 1;

Оператор цикла foreach

Оператор цикла foreach имеет одну из следующих форм:

foreach переменная in контейнер do

оператор

или

foreach переменная: тип in контейнер do

оператор

или

foreach var переменная in контейнер do

оператор

В качестве контейнера может фигурировать динамический массив, строка, множество, а также любой контейнер, удовлетворяющий интерфейсу IEnumerable или IEnumerable(например, List, Dictionary и т.д.). Переменная цикла должна иметь тип, совпадающий с типом элементов контейнера (если контейнер удовлетворяет интерфейсу IEnumerable, то это тип object). В последней форме foreach тип переменной цикла автовыводится по типу элементов контейнера.

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

Например:

var

ss: set of string := ['Иванов','Петров','Сидоров'];

a: array of integer := (3,4,5);

b: array [1..5] of integer := (1,3,5,7,9);

l := new List;

begin

foreach s: string in ss do

write(s,' ');

writeln;

foreach x: integer in a do

write(x,' ');

writeln;

foreach var x in b do

write(x,' ');

writeln;

foreach var r in l do

write(r,' ');

end.

Операторы цикла while и repeat

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

while условие do

оператор

Условие представляет собой выражение логического типа, а оператор после do называется телом цикла. Перед каждой итерацией цикла условие вычисляется, и если оно истинно, то выполняется тело цикла, в противном случае происходит выход из цикла.

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