На первом шаге цикла счетчику присаивается значение выражения нач_знач. Затем производится проверка выражения параметр <= кон_знач (параметр >= кон_знач) и, если оно истинно выполняется тело цикла, в противном случае происходит выход из цикла. После выполнения тела цикла происходит изменение параметра на следующее большее (меньшее) значение в зависимости от формы оператора for, т.е. неявно происходит выполнение одного из двух операторов:
параметр:= Succ(параметр);
параметр:= Pred(параметр);
Затем снова идет проверка выражения параметр <= кон_знач (параметр >= кон_знач) и опять, если оно истинно выполняется тело цикла. Цикл выполняется до тех пор, пока счетчик не станет большим (меньшим) выражения кон_знач.
Примеры
For i:=1 to 10 do writeln('a');
For month:=12 downto 1 do S:=S+1;
For k:=1 downto 5 do p:=p*2;
В первом случае тело цикла выполнится 10 раз и будет выведено на экран 10 букв "а".
В втором случае тело цикла выполнится 12 раз.
В третьем случае тело цикла не выполнится ни разу, т.к. сразу 1>5.
Типовые задачи
|
|
1. Даны 10 вещественных чисел. Подсчитать среди них количество положительных.
Слово "даны" означает, что программа должна получить их от пользователя. Идея: мы должны иметь переменную счетчик, которую должны наращивать, когда введенное число окажется положительным. Нам не нужно заводить 10 переменных, достаточно одной. Алгоритм получается примерно такой:
Ввод очередного числа
Проверка
Ввод очередного числа
Проверка
И так еще 8 раз.
Очевидно, что это все можно представить в виде оператора цикла.
Повторять 10 раз
Ввод очередного числа
Проверка
Конец цикла
На языке Паскаль это будет выглядеть так:
for i:=1 to 10 do
Begin
write ('Введите ',i,'-ое число: ');
readln (x);
if x>0 then kol:=kol+1 {увеличиваем количество на 1}
end;
Полный текст программы:
program chisla;
uses crt;
var i, kol:byte;
x:real;
Begin
clrscr;
kol:=0;
for i:=1 to 10 do
Begin
write ('Введите ',i,'-ое число: ');
readln (x);
if x>0 then kol:=kol+1 {увеличиваем количество на 1}
end;
writeln ('Вы ввели ',kol,' положительных чисел.');
Readln
end.
2. Напечатать буквы латинского алфавита в обратном порядке от 'Z' до 'A'.
program alphabet;
var c:char;
Begin
for c:='Z' downto 'A' do write (c);
Readln
End
3: Вычислить N-е число Фиббоначчи. Числа Фиббоначчи строятся следующим образом: F(0)=F(1)=1; F(i+1)=F(i)+F(i-1); для i>=1. Это пример вычислений по рекуррентным формулам.
program Fib;
var a,b,c:word; i,n:byte;
Begin
write ('введите номер числа Фиббоначчи ');
readln (N);
a:=1; {a=F(0), a соответствует F(i-2)}
b:=1; {b=F(1), b соответствует F(i-1)}
for i:=2 to N do
Begin
c:=a+b; {c соответствует F(i)}
a:=b; b:=c; {в качестве a и b берется следующая пара чисел}
end;
writeln (N,'-е число Фиббоначчи =',b); {для N>=2 b=c}
Readln
end.