Карта сайта

sotau.cbg.ru

Turbo Pascal
Turbo Pascal
Цикл с параметром (с переменной) For .. to .. do ..

Цикл с параметром For .. to .. do .. используется если нам заранее известно сколько раз необходимо выполнить повторение некоторых действий.

Общий вид: Увеличение значения параметра (переменной) на 1:

          for  <переменная> := <начальное значение> to <конечное значение> do
           begin
            {тело цикла}
           end;
        

Общий вид: Уменьшение значения параметра (переменной) на 1::

          for <переменная> := <начальное значение> downto <конечное значение> do
           begin
            {тело цикла}
           end;
        

Порядок выполнения цикла For .. to .. do ..

1) Вычисляются начальное и конечное значение;
2) Параметру цикла присваивается начальное значение, если оно не больше конечного;
3) Выполняется тело цикла;
4) Значение параметра цикла увеличивается на один шаг;
5) Проверяется условие: если значение параметра цикла не больше конечного, то происходит переход к п. 3, иначе - конец цикла и продолжение программы.

Особенности:

Оператор For вызывает {тело цикла} по одному разу для каждого значения <переменная> из диапазона от <начальное значение> до <конечное значение>;

<переменная>, <начальное значение> и <конечное значение> должны иметь только порядковый тип (как показывает практика чаще всего это целочисленный тип Integer);

шаг изменения значения <переменной> цикла всегда равен 1 (to) или -1 (downto);

если в {теле цикла} только один оператор, слова begin и end можно не писать.
Пример: For i := 1 to 8 do Writeln ('Привет');

если <конечное значение> меньше <начального значения>, цикл (to) не выполняется ни разу (проверка условия в начале цикла, цикл с предусловием)

в {теле цикла} не разрешается изменять значение <переменной> цикла (в этом случае сбивается счетчик количества выполнений {тела цикла})

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

          n := 8;
          for i :=1 to n do
           begin
            writeln ('Привет');
            n := n + 1; {зацикливания происходить не будет}
           end;
        

после выполнения цикла во многих системах устанавливается первое значение переменной цикла, при котором нарушено условие

          for i := 1 to 8 do writeln ('Привет');
          writeln ('i=', i); {i = 9}
          ...
          for i:=8 downto 1 do writeln ('Привет');
          writeln ('i=', i); {i = 0}
        

Сколько раз выполняется цикл?

          a := 1;
          for i:=1 to 3 do a := a+1; {цикл выполняется 3 раза; конечное значение а = 4}
          ...
          a := 1;
          for i:=3 to 1 do a := a+1; {цикл выполняется 0 раз; конечное значение а = 1}
          ...
          a := 1;
          for i:=1 downto 3 do a := a+1; {цикл выполняется 0 раз; конечное значение а = 1}
          ...
          a := 1;
          for i:=3 downto 1 do a := a+1; {цикл выполняется 3 раза; конечное значение а = 4}
        

Как изменить шаг цикла?

Задача. Вывести на экран квадраты и кубы нечётных целых чисел от 1 до 9

Особенность: переменная цикла должна увеличиваться на 2.

Проблема: в Паскале шаг может быть 1 или -1

Способ #1:

          ...
           for i:=1 to 9 do
            begin
             if i mod 2 = 1 then
              begin
               i2 := i * i;
               i3 := i2 * i;
               writeln (i:4, i2:4, i3:4);
              end;
            end;
           ...
        

Способ #2: Надо вывести всего 5 чисел, переменная k изменяется от 1 до 5. Начальное значение i равно 1, с каждым шагом цикла i увеличивается на 2

          ...
           i := 1;
            for k:=1 to 5 do
             begin
              i2 := i * i;
              i3 := i2 * i;
              writeln (i:4, i2:4, i3:4);
              i := i + 2;
             end;
          ...
        

Способ #3: Надо вывести всего 5 чисел, переменная k изменяется от 1 до 5. Зная k, надо рассчитать i

          ...
           for k:=1 to 5 do
            begin
             i := 2*k – 1;
             i2 := i * i;
             i3 := i2 * i;
             writeln (i:4, i2:4, i3:4);
            end;
          ...
        

Пример #1: Квадраты чисел от 2 до 10

          ...
           for x := 2 to 10 do writeln (x * x);
          ...
        

Пример #2: Латинский алфавит

          ...
           for ch := 'A' to 'Z' do writeln (ch);
          ...
        

Задача: Ввести с клавиатуры a и b. Найти сумму целых чисел, принадлежащих отрезку [a, b]

          program Summa_for;
           var Summa, x, a, b : integer; {х-число между а и b}
          begin
           writeln ('Введи a и b');
           readln (a, b);
           Summa := 0;
           for x := a to b do
            Summa := Summa + x;
           writeln ('сумма=', Summa);
           readln;
          end.      
        

    © 2009 - 2024 Acid Ulcer