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

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

Цикл представляет собой последовательность операторов, которая выполняется неоднократно.

Операторы организации циклов. Простой и составной операторы

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

В языке программирования Pascal имеется стандартный набор из трех разновидностей цикла —

1. цикл с постусловием (инструкция repeat),

2. цикл с предусловием (инструкция while)

3. цикл со счетчиком (инструкция for).

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

· подавляющее большинство задач с циклами можно решить разными способами, используя при этом любой из трех операторов цикла;

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

· самым универсальным из всех операторов цикла считается while, поэтому в случае затруднений с выбором можно отдать предпочтение ему;

· цикл repeat имеет очень простой и понятный синтаксис, поэтому с него удобно начинать изучение циклов;

· цикл for обеспечивает удобную запись циклов с заранее известным числом повторений;

· при неумелом использовании циклов любого типа возможна ситуация, когда компьютер не сможет нормально закончить цикл (в таком случае говорят, что программа "зациклилась'). При работе в среде Turbo Pascal для выхода из подобной ситуации используется комбинация клавиш <Ctrl>+<Break>; если это не помогает, есть и крайнее средство — <Ctrl>+<Alt>+<Del>. Одновременное нажатие этих трех клавиш или кнопки Reset, расположенной на системном блоке, позволяет перезагрузить компьютер, при этом данные, относящиеся к работающей программе, будут утеряны.

Цикл с параметром (со счетчиком, с заданным числом повторений)

В нем важную роль играет переменная-параметр, которая на каждом шаге цикла автоматически изменяет свое значение ровно на единицу — поэтому ее и называют счетчиком.

Вариант 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
Сейчас читают про: