Операторы цикла

Говорят, что в алгоритме используется циклическая конструкция, если некоторая группа подряд идущих шагов алгоритма может выполниться несколько раз или в зависимости от некоторого условия.

Операторы цикла:

1)  с параметром (предназначен для повторения одних и тех же действий несколько раз, пока не перебраны все значения параметра цикла):

а) с возрастанием параметра цикла:

Общий вид оператора цикла с параметром с возрастанием параметра цикла:

for i:=m1 to m2 do

тело цикла;

б) с убыванием параметра цикла:

Общий вид оператора цикла с параметром с убыванием параметра цикла:

for i:=m2 downto m1 do

тело цикла;

2)  с предусловием (предназначен для повторения одних и тех же действий пока соблюдается некоторое условие):

Общий вид оператора цикла с предусловием:

while <условие> do

тело цикла;

3)  с постусловием (предназначен для повторения одних и тех же действий до тех пор пока не станет соблюдаться некоторое условие):

Общий вид оператора цикла с постусловием:

repeat

тело цикла

until <условие>;

Тело цикла может быть так и простым оператором, так и составным.

Составной оператор представляет собой группу из произвольного числа операторов, отделенных друг от друга точкой с запятой, и ограниченную операторными скобками begin и end (конструкцией begin … end).

Как применить операторы цикла к решению задач?

Пример:

Составить программу нахождения факториала числа N (произведение первых N натуральных чисел).

N!=1* 2* 3*…* N.

Ответ:

НЕ нашли? Не то? Что вы ищете?

I способ с помощью оператора цикла с параметром (с возрастанием параметра цикла):

program factorial_1;

var f:longint;

i, n:integer;

begin

readln(n);

f:=1;

for i:=1 to n do

f:=f*i;

writeln('Factorial=',f);

end.

II способ с помощью оператора цикла с параметром (с убыванием параметра цикла):

program factorial_2;

var f:longint;

i, n:integer;

begin

readln(n);

f:=1;

for i:=n downto 1 do

f:=f*i;

writeln('Factorial=',f);

end.

III способ с помощью оператора цикла с предусловием:

program factorial_3;

var f:longint;

i, n:integer;

begin

readln(n);

f:=1;

i:=1;

while i<=n do

begin

f:=f*i;

inc(i);

end;

writeln('Factorial=',f);

end.

IV способ с помощью оператора цикла с постусловием:

program factorial_4;

var f:longint;

i, n:integer;

begin

readln(n);

f:=1;

i:=1;

repeat

f:=f*i;

inc(i);

until i>n;

writeln('Factorial=',f);

end.

Сделайте разбор выполненных заданий, если можно проверьте на Pascal, откомпилируйте и запустите:

1. Какие значения примут переменные с и d после выполнения следующего фрагмента программы:

c:=0; d:=10;
while d>=0 do

begin

c:=c+1;

d:=d-3

end;

Ответ: с=4; d=-2

с

d

d>=0

0

10

10>=0 (да)

1

7

7>=0 (да)

2

4

4>=0 (да)

3

1

1>=0 (да)

4

-2

-2>=0 (нет)

2. Напечатать таблицу значений функции

Y= для х=0; 0,5 с шагом 0,1 где k=0,5

Ответ:

Так как приращение параметра х не единица, а 0,1 , то невозможно использовать цикл с параметром

I способ:

program u3_1;

var k, x,y:real;

begin

k:=0.5; {k – постоянная величина}

x:=0.1; {указываем обязательно первоначальное значение х}

while x<=0.5 do {пока соблюдается это условие, повторяем тело цикла}

begin

{тело цикла состоит из трех действий или операторов}

y:=sqrt(sqr(sin(2*x))+sqr(k)*2*sqr(cos(x))); {вычисляем значение y по заданной формуле}

writeln('при x=',x:3:1,' y=',y:3:1); {выводим на экран значение х и y}

x:=x+0.1; {увеличиваем каждый раз значение x на 0.1}

end;

end.

II способ:

С использованием оператора цикла с постусловием тело цикла так же остается.

program u3_2;

var k, x,y:real;

begin

k:=0.5;

x:=0.1;

repeat

y:=sqrt(sqr(sin(2*x))+sqr(k)*2*sqr(cos(x)));

writeln('x=',x:3:1,' y=',y:3:1);

x:=x+0.1;

until x>0.5; {надо написать такое условие, при соблюдении которого, надо выйти из цикла}

end.

3. Чем отличается оператор цикла с постусловием от оператора цикла с предусловием?

Ответ:

Команда повторения с постусловием отличается от команды повторения с предусловием тем, что во-первых: тело цикла исполнится хотя бы один раз;

во-вторых: критерием выхода из цикла является соблюдение условия.

Формула n-го члена последовательности

1. Даны числовые ряды:

a)  2, 4, 6, 8,…

b)  1, 4, 9, 16, 25

c) 

d) 

e) 

Выведите формулу n-го члена последовательности.

2. Как вывести формулу n-го члена последовательности?

Для этого надо написать формулу (закон) зависимости члена последовательности от его порядкового номера.

a)  an=2*n

b)  аn=n2

c)  an=1/(2*n+1)

d)  an=(-1)n/n3

e)  an=2n/(4*n-1) (все формулы записаны математически)

I.  Практическая работа

1.  Найти сумму, предварительно найдя формулу общего члена S=3+

·  Сколько всего членов последовательности? (Ответ: 100)

·  Выведите формулу n-го члена последовательности? (an=(3*n)/(2*n-1)

·  Какое действие вы будете повторять? (Предыдущей сумме сложить член последовательности)

Теперь составим программу:

S=3+

Пока еще не начали складывать члены последовательности, сумма будет равна нулю.

Если любой сумме прибавить 0, сумма не изменится. Прибавляем первый член последовательности, потом второй, …. и последний.

Ответ:

var S:real; {вещественного типа, т. к. в формуле n-го члена последовательности есть деление}

n:integer;

begin

S:=0;

for n:=1 to 100 do {всего 100 членов последовательности}

S:=S+(3*n)/(2*n-1); {каждый раз прибавляем следующий член последовательности предыдущей сумме}

writeln('S=',S:3:2);

readln;

end.

Проверьте, на экране выводится окончательная сумма.

А теперь вывод внесите в тело цикла.

var S:real;

n:integer;

begin

S:=0;

for n:=1 to 100 do {всего 100 членов последовательности}

begin

S:=S+(3*n)/(2*n-1);

write('S=',S:3:2, ‘ ’);

end;

{если тело цикла составной т. е. состоит из более одного оператора (действия), то надо заключить их в операторные скобки  begin … end}

readln;

end.

А теперь, что появилось на экране?

Появились предварительные суммы.

Дальше самостоятельно выполните задания в тетради:

2.  Каждая бактерия делится на две в течении одной минуты. В начальный момент имеется одна бактерия. Составьте программу, которая рассчитывает количество бактерий на заданное вами целое значение времени.

3.  Вывести все числа, кратные натуральному числу N и не превосходящие данного числа М.

4.  Составить программу нахождения и вывода всех целых четырехзначных чисел, сумма цифр

которых равна 22.

II.  Д/з

1.  Составить программу нахождения произведения 15 первых членов последовательности

2∙ 6 ∙ 12 ∙ 20 ∙….

2. В ЭВМ вводятся по очереди данные о росте N учащихся класса. Определить средний рост учащихся класса.