Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмизация и программирование 14.12.2011.doc
Скачиваний:
91
Добавлен:
07.02.2015
Размер:
833.54 Кб
Скачать

1..5: Writeln('Будний день');

6,7: Writeln('Выходной день');

end;

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

case i of

2,5: Write(1);

4..6: Write(2);

end;

приведет к ошибке компиляции «Пересечение диапазонов меток в операторе case».

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

Оператор цикла forимеет одну из двух форм:

for переменная:=начальное значение to конечное значение do

оператор

или

for переменная:= конечное значение downto начальное значение do

оператор

Структурное обозначение следующее:

Текст от слова forдо словаdoвключительно называетсязаголовком цикла, а оператор послеdo–телом цикла. Переменная после словаforназываетсяпараметром цикла. Если в цикле необходимо выполнить группу операторов, то ее следует заключить в операторные скобкиbegin … end. Для первой формы цикла с ключевым словомtoпараметр цикла меняется от начального значения до конечного значения, увеличиваясь всякий раз на единицу, а для второй формы ключевым словомdownto– уменьшаясь на единицу. Для каждого значения переменной-параметра выполняется тело цикла. Однократное повторение тела цикла называетсяитерацией цикла.

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

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

for i:=1 to 10 do

for i:=1 to 5 do write(i);

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

var

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

c: char;

...

for en:=red to blue do write(Ord(en):2);

for c:='a' to 'z' do write(c);

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

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

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

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

Структурное обозначение следующее:

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

while 2>1 do write(1);

Пример. Дано натуральное число n(n> 0). Подсчитать количество цифр данного числа.

Var n,count: integer;

begin

read(n); count:=0;

while n>0 do

begin

Inc(count);

n:=n div 10

end;

writeln(count)

end.

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

repeat

операторы

until условие;

Структурное обозначение следующее:

В отличие от цикла whileусловие вычисляется после очередной итерации цикла, и если оно истинно, то происходит выход из цикла. Таким образом, операторы, образующие тело цикла оператораrepeat, выполняются по крайней мере один раз.

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

repeat

write(1);

until 2=1;

Задача о вычислении количества цифр данного натурального числа nможет быть решена с помощью оператора цикла с постусловием следующим образом: