nextupprevious
Next:4.1.5 Пошаговая разработка программ
Up:4.1 Средства для организации циклических вычислений
Previous:4.1.3 Оператор цикла с с условием на окончание


4.1.4 Операторы цикла с параметрами

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

Программа: Произведение ста целых чисел

Вход$\alpha \beta$
где$\alpha \beta \in$ Integer$^+$,
$\mid \alpha \mid$ = 100
Выход$M$
где$M = Mult(\alpha)$

Решение задачи описывается программой

module ПроизведениеСтаЧисел;
    const Длина = 100;
    var N,K,M : integer;
begin M := 1; N := 0;
    (**)
    while N < Длина do  (* {Ограничивающее выражение: Длина-N } *)
         Read(K); M := M$*$K; N := N+1
         (**)
    end;
    (* *)
    write(M)
endПроизведениеСтаЧисел.

Фактически требуется, начиная от состояния памяти, в котором M равно 1, выполнить 100 раз оператор

begin read(K); M:= M$*$K end.

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

module ПроизведениеСтаЧисел1;
    const Длина = 100;
    var N,K,M: integer;
begin M := 1;
     (**)

    for N := 1 to Длина do
        read(K); M := M$*$K
        (* *)
    end;
    (*  *)
    write(M)
end ПроизведениеСтаЧисел1.

Цикл с параметром задается синтаксическим правилом рис. 4.6, где все выражение и пременная имеют тип integer.
 

ForStatement = for ident ":=" Expression to Expression [by ConstExpression] do StatementSequence end.

Рис. 4.6. Синтаксичес опертора цикла с параметром

Семантику оператора цикла можно описать следующим образом. Пусть V обозначает переменную, E1,  E2 и E3 -- выражения, а S -- последовательность операторов. Тогда оператор цикла

for V := E1 to E2 by  E3 do S end

описывается следующей последовательностью операторов:

V:= E1; temp := E2;
if E3 > 0 then
    while V <= E2 do  S; V := V+ E3 end
else
    while V >= E2 do  S; V := V+ E3 end
end.

Значение E3 (шаг) должно быть ненулевым константным выражением целого типа. Если опущен шаг, тогда шаг по умолчанию равен 1.

Next:4.1.5 Пошаговая разработка программ
Up:4.1 Средства для организации циклических вычислений
Previous:4.1.3 Оператор цикла с условием на окончание



© В.Н. Касьянов, Е.В.Касьянова, 2004