Составной оператор - это последовательность произвольных операторов программы, заключенная в операторные скобки - зарезервированные слова begin. end. Инструкциюfor можно реализовать двумя способами

Инструкциюfor можно реализовать двумя способами.

Вариант 1 (с увеличением счетчика):

for Счетчик:=НачальноеЗначение to КонечноеЗначение do

begin

{ Инструкции }

end;

Строка, содержащая for...do, называется заголовком цикла, оператор, стоящий после do, образует его тело. Очень часто тело цикла — составной оператор. Если тело цикла представлено одиночным оператором, то begin и end не пишутся.

Язык Турбо Паскаль не накладывает никаких ограничений на характер операторов, входящих в составной оператор. Среди них могут быть и другие составные операторы - Турбо Паскаль допускает произвольную глубину их вложенности:

Фактически, весь раздел операторов, обрамленный словами begin...end,представляет собой один составной оператор. Поскольку зарезервированное слово end является закрывающей операторной скобкой, оно одновременно указывает и конец предыдущего поэтому ставить перед ним символ “;” необязательно. Наличие точки с запятой перед end означает, что между последним оператором и операторной скобкой end располагается пустой оператор.

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

Инструкции между begin и end выполняются такое число раз, какое определяет выражение [(КонечноеЗначение - НачальноеЗначение) + 1].

Это соответствует всем значениям счетчика от начального до конечного включительно.

Если НачальноеЗначение больше, чем КонечноеЗначение, то инструкции

между begin и end не выполняются ни разу.

Например, выполнение цикла

for i:=10 to 14 do write(i: 3);

выведет на экран последовательность чисел в виде:

10 11 12 13 14

Вариант 2 (с уменьшением счетчика):

for Счетчик:=НачальноеЗначение downto КонечноеЗначение do

begin

{ Инструкции }

end;

Инструкции между begin и end выполняются такое число раз, какое определяет выражение [(НачальноеЗначение - КонечноеЗначение) + 1].

Если НачальноеЗначение меньше, чем КонечноеЗначёние, то инструкции между begin и end не выполняются ни разу. Например, выполнение цикла

for i:=14 downto 10 do write(i: 3);

выведет на экран последовательность цифр в виде: 14 13 12 и 10. Если переменная-счетчик имеет символьный тип char, то оператор

for ch: = 'a' to 'е' do write (ch: 2);

выведет на экран последовательность букв в виде: abсde

а оператор

for ch:= 'е' downto 'a' do write (ch: 2);

выведет на экран последовательность букв в виде: е d с b а

Следует знать:

□ оператор (инструкция) for используется для организации циклов с фиксированным, заранее известным или определяемым во время выполнения программы числом повторений;

□ переменная-счетчик должна быть порядкового типа: чаще — целочисленная, реже — символьного, логического или перечисляемого типов. Использование вещественного типа недопустимо;

□ начальное и конечное значения параметра цикла могут быть константами, переменными, выражениями и должны принадлежать к одному и тому же типу данных. Начальное и конечное значения параметра цикла нельзя изменять во время выполнения цикла;

□ после нормального завершения оператора for значение параметра цикла равно конечному значению (в некоторых компиляторах (Delphi) — на единицу больше). Если оператор for не выполнялся, значение параметра цикла не определено;

□ параметр цикла for может изменяться (увеличиваться или уменьшаться) каждый раз при выполнении тела цикла только на единицу. Если нужен другой шаг изменения параметра, предпочтительнее циклы repeat и while.

Например, рассмотрим фрагмент программы, в котором предпринята попытка "обмануть" оператор for и получить изменение параметра i на 2 на каждом шаге цикла (единица прибавляется автоматически и еще одна единица прибавляется в теле цикла).

for i:= 1 to 10 do

begin

write(i:4);

i:= i + 1;

end;

В данном случае на экране будут выведены числа

1 3 5 7 9

Однако настоятельно не рекомендуем пользоваться таким приемом. Стоит только немного видоизменить заголовок цикла предыдущего примера и взять в качестве конечного значения 9, а не 10: for i:= i to 9 do, как ваша программа не сможет нормально выйти из цикла — "зациклится", т. к. в момент проверки условия выхода из цикла i никогда не будет равно 9 (сначала 8, а потом сразу 10). Компилятор Delphi вообще не допускает по­добных действий.

Для досрочного выхода из цикла можно использовать оператор goto или стандартную процедуру break. Стандартная процедура continue позволяет прервать выполнение тела любого цикла и передает управление на его заголовок, заставляя цикл немедленно перейти к выполнению следующего шага.

Вложенные циклы

В теле любого оператора цикла могут находиться другие операторы цикла. При этом цикл, содержащий в себе другой, называют внешним, а цикл, находящийся в теле первого, — внутренним (вложенным). Правила организации внешнего и внутреннего циклов такие же, как и для простого цикла.

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

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

Var

i, j: byte;

begin

for i:=l to 9 do

begin

for j:=1 to 9 do write(i, '*', j, ' = ', i*j:2);

writeln; {перевод строки — во внешнем цикле}

end;

end.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: