ВСТАВКА
End.
Repeat
Begin
Begin
Var
Нц
Repeat
Кц
Программирование циклов
Цикл – многократное повторение последовательности действий по некоторому условию.
Известны три типа циклических алгоритмических структур:
· цикл с предусловием
· цикл с постусловием
· цикл с параметром
Цикл с предусловием (цикл-пока) – пока истинно условие повторяется выполнение тела цикла.
|
Пока <условие>, повторять
|
<тело цикла>
На Pascal:
while <логическое выражение> do < тело цикла > ;
Правило:
1. Проверяется условие (логического выражение):
o если условие даёт ответ - истина ( true), то выполняется тело циклаи возвращается на п.1 - проверку условия.
o если условие даёт ответ - ложь (falsh), то тело циклане выполняет,ауходит за цикл далее по программе.
(цикл заканчивается, когда логическое выражение принимает значение falsh).
----------------
Цикл с постусловием (цикл-до) – повторять выполнение тела цикла пока не выполнится условие (пока условие не станет true ).
|
до тех пор, пока не выполнится <условие>.
|
|
| |||
На Pascal:
< тело цикла >
until<логическое выражение> ;
Правило:
1. Выполняется <тело цикла>, затем
2. Проверяется <условие>.
Если <условие> ложно, то исполнитель возвращается на выполнение <тела цикла>, (п.1)
Если <условие> истинно, то исполнитель уходит за цикл.
(цикл заканчивается, когда логическое выражение принимает значение - true).
----------------
|
ДляiотInдоIk , повторять
<тело цикла>
кц
На Pascal два варианта записи:
for I :=<нач.значение> to <кон.значение> do < тело цикла >;
for I :=<нач.значение> downto <кон.значение> do< тело цикла >;
( Цикл повторяется, пока значение параметра цикла – счётчика - лежит в интервале между начальным и конечным значениями.
В первом варианте после выполнения тела цикла счётчик увеличивается на единицу, а во втором – уменьшается на единицу ).
Правило:
1. Переменной-счётчику присваивается начальное значение
2. Проверяется: не превысил ли счётчик конечное значение :
o если счётчик не превысил конечное значение, то выполняется тело цикла, счётчик увеличивается на 1и исполнитель возвращается на п.2 - проверку условия.
o Если счётчик превысил конечное значение, то тело циклане выполняет,ауходит за цикл далее по программе.
(цикл заканчивается, когда счётчик > кон.значения).
----------------
Пример 1. Вычислить сумму натурального ряда чисел от 1 до N.
В одной программе реализуем решение этой задачи с использование всех трёх типов цикла.
Program natur;
N, i, Summa: integer;
X, : real;
Write ('Введите N= ');
ReadLn(N );
{Цикл с предусловием}
Summa:=0; {ячейка, в которой накапливается сумма вводимых чисел}
i:= 1; { i –счетчик количества вводимые числа}
while i<= N do
Summa:=Summa+i ;
i:=i+1;
end;
WriteLn ('Результата первого суммирования =‘,Summa);
{Цикл с постусловием}
Summa:=0;
i:= 1;
Summa:=Summa+i ;
i:=i+1
until i>N;
WriteLn ('Результата второго суммирования = ‘,Summa);
{Цикл1 с параметром}
Summa:=0;
for i:=1 to N doSumma:=Summa+i;
WriteLn ('Результата третьего суммирования =‘,Summa);
{Цикл2 с параметром}
Summa:=0;
for i:= N downto 1 doSumma:=Summa+i;
WriteLn ('Результата третьего суммирования =‘,Summa);
Задание:Выполнить трассировку приN=3
----------------------------------------------------------------------
Какой цикл использовать?
· Используйте цикл forв том случае, когда точно знаете, сколько раз должно быть выполнено тело цикла.
· Используйте цикл repeat, если необходимо, чтобы тело цикла выполнилось по крайней мере один раз.
· Используйте цикл while , если хотите, чтобы проверка была произведена прежде, чем будет выполнено тело цикла.
Практика 1
Какое значение примет переменная х в результате выполнения фрагмента программы:
X:=1; While x<10 do X:=X+3; X:=X+1; Ответ: 11_____ | X:=1; While x<10 do Begin X:=X+3; X:=X+1; End; Ответ:13 _______ | |
X:=1; While x< >1 do Begin X:=X+3; X:=X+1; End; Ответ:1 _______ | X:=1; While x<100 do Begin X:=X*2; End; Ответ:128 _______ |
Практика 2
Какое значение примет переменная Х в результате выполнения фрагмента программы:
X:=1; Repeat X:=X+1; Until X>10; Ответ: 11_______ | X:=1; Repeat X:=X+3; X:=X+1; Until X>10; Ответ: 13_______ | |
X:=1; Repeat X:=X+3; X:=X+1; Until x< >1; Ответ: 5_______ | X:=1; Repeat X:=X*2; Until x<100 Ответ:2 _______ |
Практика 2
Дано действительное число А. Найдите первое значение числа N, при котором сумма S=1+1/2+1/3+…+1/N превышает А. Какая из предложенных программ решает эту задачу?
Program PR1; Var N:integer; A,S:real; BEGIN Read(A); S:=0; N:=1; repeat S:=S+1/N; N:=N+1; until S>A; Write(N); END. | Program PR2; Var N:integer; A,S:real; BEGIN Read(A); S:=0; N:=1; repeat S:=S+1/N; N:=N+1; untilS<=A; Write(N); END. | Program PR3; Var N:integer; A,S:real; BEGIN Read(A); S:=0; N:=1; repeat S:=S+1/N; until S>A; Write(N); END. |
да |
Практика 3
Вычислить произведение натурального ряда чисел от 1 до N.
В одной программе реализуем решение этой задачи с использование всех трёх типов цикла.
Задача 1. Определить значение целочисленной переменной S после выполнения алгоритмов:
а) | |
S:= 128 для i от 1 до 4, повторять нц S:=S-3; кц | S:= 128 for i:= 1 to 4 do S:=S-3; WriteLn (S) |
б) | |
S:= 0 для i от 1 до 2, повторять нц для j от 2 до 3, повторять нц S:=i+j кц кц | S:= 0 for i:= 1 to 2 do for j:= 2 to 3 do S:= i+j; WriteLn (S); ; |
Пример1.Рулетка (ав.Немнюгин, стр.94)
Игра на угадывание целого числа от 1 до 10.
Пусть программа «загадает» такое число, а пользователь введёт предполагаемое значение. Если число угадано, программа поздравит победителя, а если нет – попросит его повторить попытку ещё раз. Каждая безуспешная попытка снижает призовые баллы. В самом начале игроку назначается 10 призовых баллов.
Алгоритм:
- программа выбирает случайное число от 1 до 10;
- вывести приглашение на ввод целого значения;
- если число меньше задуманного, сообщить об этом игроку, иначе - сообщить ему о том, что введенное число больше задуманного;
- повторять ввод целого значения до тех пор, пока число не будет угадано;
- вывести поздравление победителю и сообщить набранное число баллов;
- завершить работу.
Поскольку возможно, что число будет угадано сразу, в этом случае не надо выводить подсказку игроку. Поэтому следует использовать цикл-пока.
Program rulette;