Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Редьков Е.В_otv.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
834.05 Кб
Скачать

12.Цикл с явно заданным количеством повторений. Основные элементы и варианты реализации.

ЦИКЛ С ПАРАМЕТРОМ --- for...to...do... и for...downto...do...

   Третий вариант оператора цикла - цикл со счётчиком. (с параметром). Можно считать, что есть две очень похожиг друг на друга разновидности цикла со счётчиком. Первый из этих операторов имеет вид

   for j := expression1 to expression2 do statement;

   Здесь переменная j, называемая управляющей перменной цикла for, является произвольным идентификатором, который объявляется как перменная любого скалярного типа (к скалярным относятмя целый символьный, булев и перечисляемый типы).    При выполнении оператора for сначала вычисляется значение выражения expression1, затем вычислятся значение выражения expression2, далее управляющая перменная цикла последовательно пробегает все значниея от expression1 до expression2. В том случае, когда значине expression1 оказывается больше значения expression2, тело цикла не будет выполняться вовсе. Эти значения остаются неизменными в ходе выполнения всего цикла for. Рассматриваемый вариант цикла for эквивалентен следующей последовательности операторов:

   j := expression1;

   k := expression2;

   while j <= k do

   begin

   statement;

   inc(j);

   end;

   в предположении, что при каждом выполнении оператора statement не изменяются значения j и k.    Оператор for вида for j := expression1 to expression2 do statement; неэквивалентен последовательности операторов

   begin

   j := expression1;

   while j <= expression2 do

   begin

   statement;

   j := j + 1;

   end;

   end;

   потому что выражение expression2 может изменяться при каждом выполнении оператора statement в цикле while.    В теле цикла for следует избегать операторов, изменяющих значние управляющей переменной j. Несмотря на то, что использование подобных конструкций не приводит к ошибкам компиляции, они потенциально опасны и могут приводит к неприятным последствиям. Рассмотрим пример:

   sum := 0;

   for k := 1 to 100 do

   begin

   sum := sum + SQR(k); k := k + 2;

   end;

   Этот фрагмент программы явялется попыткой просуммировать n2 по всем целым значениям вида n = (3*k+1), лежащим в диапазоне от 1 до 100. Здесь допущена обшибка реализации алгоритма, так как управляющая переменная k изменяется в сставном операторе, управляемой той же переменной kю Правильной будет конструкция следующего вида:

   sum :=0;

   for k := to 33 do sum := sum + Sqr(3*k+1);

   или

   sum := 0; k := 1;

   repeat

   sum := sum + Sqr(k); k := k + 3;

   until k > 100;

   После выполнения цикла for значения управляющей переменной становиться неопределённым.    Вариант for...downto...do... цикла for аналогичен циклу for...to...do... за исключением того, что в нём управляющая переменная на каждом шаге выполнения не увеличивается, а уменьшается на единицу:

   for j := expression1 downto expression2 do statement;

   Используейте цикл for в том случае, когда точно знаете, сколько раз должно быть выполнено тело цикла. В противном случае обратитесь к циклам repeat или while.

Операторы цикла с параметром (for) Операторы цикла с параметром (которые начинаются со слова for) вызывает повторяющееся выполнение оператора (который может быть составным оператором) пока управляющей переменной присваива ется возрастающая последовательность значений.

В качестве управляющей переменной должен использоваться идентификатор переменой (без какого-либо квалификатора), который обозначает переменную, объявленную локальной в блоке, в котором содержится оператор for. Управляющая переменная должна иметь пе речислимый тип. Начальное и конечное значения должны иметь тип, совместимый по присваиванию с перечислимым типом.

Когда начинает выполняться оператор for, начальное и конеч ное значения определяются один раз, и эти значения сохраняются на протяжении всего выполнения оператора for.

Оператор, который содержится в теле оператора for, выполня ется один раз для каждого значения в диапазоне между начальным и конечным значением. Управляющая переменная всегда инициализирует ся начальным значением. Когда работает оператор for, значение уп равляющей переменной (счетчика циклов) увеличивается при каждом повторении на единицу. Если начальное значение превышает конечное значение, то содержащийся в теле оператора for оператор не выпол нятся. Когда в операторе цикла используется ключевое слово downto, значение управляющей переменной уменьшается при каждом повторении на единицу. Если начальное значение в таком операторе меньше, чем конечное значение, то содержащийся в теле оператора цикла оператор не выполнятся.

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