Оператор выбора выполняет одно действие из нескольких в зависимости от значения некоторого выражения, называемого переключателем . Он имеет следующий вид:
caseпереключатель of
список выбора 1: оператор1;
...
список выбора N: операторN;
elseоператор0
end;
Переключатель представляет собой выражение порядкового типа или строкового типа, а списки выбора содержат константы совместимого по присваиванию типа. Как и в операторе if, ветка elseможет отсутствовать.
Оператор caseработает следующим образом. Если в одном из списков выбора найдено текущее значение переключателя, то выполняется оператор, соответствующий данному списку. Если же значение переключателя не найдено ни в одном списке, то выполняется оператор по ветке elseили, если ветка elseотсутствует, оператор caseне выполняет никаких действий.
Список выбора состоит либо из одной константы, либо для перечислимого типа из диапазона значений вида a..b (константа a должна быть меньше константы b); можно также перечислить несколько констант или диапазонов через запятую. Например:
caseCountry of
'Россия': Capital := 'Москва';
'Франция': Capital := 'Париж';
'Италия': Capital := 'Рим';
else Capital := 'Страна отсутствует в базе данных';
end;
caseDayOfWeek of
1..5: writeln('Будний день');
6,7: writeln('Выходной день');
end;
Списки выбора не должны пересекаться. Например, следующий фрагмент
casei of
2,5: write(1);
4..6: write(2);
end;
приведет к ошибке компиляции.
Оператор цикла forимеет одну из двух форм:
forпеременная := начальное значение toконечное значение do
оператор
или
forпеременная := начальное значение downtoконечное значение do
оператор
Кроме того, переменную можно описать непосредственно в заголовке цикла:
forпеременная: тип := начальное значение toили downtoконечное значение do
оператор
или
for varпеременная := начальное значение toили downtoконечное значение do
оператор
В последнем случае используется автоопределение типа переменной по типу начального значения. В двух последних случаях область действия объявленной переменной распространяется до конца тела цикла, которое в данном случае образует неявный блок. Вне тела цикла такая переменная недоступна, поэтому следующий цикл может использовать переменную с тем же именем:
forvar i := 1 to10 do
Print(i);
forvar i := 1 to5 do
Print(i*i);
Текст от слова forдо слова doвключительно называется заголовком цикла , а оператор после do- телом цикла. Переменная после слова forназывается параметром цикла . Для первой формы цикла с ключевым словом toпараметр цикла меняется от начального значения до конечного значения, увеличиваясь всякий раз на единицу, а для второй формы ключевым словом downto- уменьшаясь на единицу. Для каждого значения переменной-параметра выполняется тело цикла. Однократное повторение тела цикла называется итерацией цикла . Значение параметра цикла после завершения цикла считается неопределенным.
Переменная-параметр цикла может иметь любой порядковый тип. При этом начальное и конечное значения должны быть совместимы по присваиванию с переменной-параметром цикла.
Например:
varen: (red,green,blue,white);
...
foren := red toblue do
write(Ord(en):2);
for varc := 'a' to'z' do
write(c);
Если для цикла for... toначальное значение переменной цикла больше конечного значения или для цикла for... downtoначальное значение переменной цикла меньше конечного значения, то тело цикла не выполнится ни разу.
Если цикл используется в подпрограмме, то переменная-параметр цикла должна быть описана как локальная. Наилучшим решением в PascalABC.NET является описание переменной в заголовке цикла.
Изменение переменной-параметра цикла внутри цикла является логической ошибкой. Например, следующий фрагмент со вложенным оператором forявляется ошибочным:
fori := 1 to10 do
i -= 1;
Читать дальше