Цикл с параметром 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.
|