Операторы цикла
Говорят, что в алгоритме используется циклическая конструкция, если некоторая группа подряд идущих шагов алгоритма может выполниться несколько раз или в зависимости от некоторого условия.
Операторы цикла:
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 учащихся класса. Определить средний рост учащихся класса.


