ВСТАВКА

End.

Repeat

Begin

Begin

Var

Нц

Repeat

Кц

Программирование циклов

 

Цикл – многократное повторение последовательности действий по некоторому условию.

 

Известны три типа циклических алгоритмических структур:

· цикл с предусловием

· цикл с постусловием

· цикл с параметром

 

 

Цикл с предусловием (цикл-пока) – пока истинно условие повторяется выполнение тела цикла.

 
 
нет


Пока <условие>, повторять

да
нц

<тело цикла>

На Pascal:

 

while <логическое выражение> do < тело цикла > ;

Правило:

1. Проверяется условие (логического выражение):

o если условие даёт ответ - истина ( true), то выполняется тело циклаи возвращается на п.1 - проверку условия.

o если условие даёт ответ - ложь (falsh), то тело циклане выполняет,ауходит за цикл далее по программе.

(цикл заканчивается, когда логическое выражение принимает значение falsh).

----------------

 

Цикл с постусловием (цикл-до) – повторять выполнение тела цикла пока не выполнится условие (пока условие не станет true ).

 
 


тело цикла
Повторять <тело цикла>

до тех пор, пока не выполнится <условие>.

да
условие

       
   
 
нет
 


На Pascal:

 

< тело цикла >

until<логическое выражение> ;

Правило:

1. Выполняется <тело цикла>, затем

2. Проверяется <условие>.

Если <условие> ложно, то исполнитель возвращается на выполнение <тела цикла>, (п.1)

Если <условие> истинно, то исполнитель уходит за цикл.

(цикл заканчивается, когда логическое выражение принимает значение - true).

 

----------------

 

 

да
Цикл с параметром (цикл со счётчиком) – цикл, выполнение которого повторяется заданное количество раз (параметр цикла изменяется от начального значения Inдо конечного – Ik).

 

Для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;