ЦИКЛЫ

  • docx
  • 26.12.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л3-0025363.docx

ЦИКЛЫ

 

Краткие теоретические сведения

 

Если в программе возникает необходимость неоднократно выполнить некоторые операторы, то используются операторы повтора (цикла). В языке Паскаль различают три вида операторов цикла: while, repeat, for. Они используются для организации цик- лов различных типов. Выражение, управляющее повторениями, должно иметь булев- ский тип.

Если число повторений оператора (составного оператора) заранее неизвестно, а задано лишь условие его повторения (или окончания), используются операторы while, repeat. Оператор for используется, если число повторений заранее известно.

 

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

В случаях, когда число повторений может быть заранее известно, для организа- ции циклической обработки информации применяется оператор повтора for. Часто этот оператор повтора называют оператором цикла с параметром, так как число по- вторений задается переменной, называемой параметром цикла, или управляющей пе- ременной. Оператор повтора for состоит из заголовка и тела цикла.

Он может быть представлен в двух форматах:

for <параметр цикла> := <S1> to <S2> do <оператор>;

for <параметр цикла> := <S1> downto <S2> do <оператор>;

где Sl и S2 — выражения, определяющие соответственно начальное и конечное значе- ния параметра цикла;

for ... do заголовок цикла;

<оператор> тело цикла.

Значение управляющей переменной изменяется на +1 (в случае to) или –1 (в случае downto).

Тело цикла может быть простым или составным оператором. Оператор for обес- печивает выполнение тела цикла до тех пор, пока не будут перебраны все значения параметра цикла от начального до конечного.

 

Пример 1.

Вывести квадраты первых десяти натуральных чисел.

 

Решение

Используемые переменные: i –натуральные числа, x– их квадраты

 

Program pr1;

Var i, x: integer;


begin

for i:=1 to 10 do begin                      {перебираем натуральные числа от 1 до 10}

x:=sqr(i);                                         {возводим очередное число в квадрат}

write(x, '  ');                                    {выводим полученное значение}

end;

end.

Результат

1         4   9 16   25  36   49   64  81   100

 

Пример 2.

Найти сумму 1 + 1/3 + 1/5 +...(N слагаемых).

 

Program pr2;

Var             I, N: integer; S: real;

begin


 

 

 

 

 

end.


Write('N='); Readln(N);      {вводим количество слагаемых}

S:=0;                                    {обнуляем сумму}

{выполняем цикл N раз, добавляя к сумме по одному слагаемому}

For I:=1 to N do S:=S+1/(2*I-1);

Writeln('S=',S:5:2); {выводим результат с двумя десятичными знаками}


Результат:

N=4 S= 1.68

 

Пример 3.

Дано натуральное число n. Вычислить 31+32+…........ +3n

 

program pr3; var i,n:integer;

s:real; begin

write('введите n '); readln(n);

s:=0;

for i:=1 to n do s:=s+ exp(i*ln(3));

writeln('сумма=',s:4:0); readln;

end.

 

Результат:


введите n 5

сумма= 363

 

Пример 4.

Найти сумму ряда: S = x - x2 /4 + x3/9 - x4/16...                  (n слагаемых).

 

Program Pr4;

Var         i, n, z: integer;

p, s: real;

begin

writeln ('введите n'); readln ( n ); writeln('введите x'); readln( x ); z:=1; p:=x;  s:=0;

for i:=1 to n do begin

s:= s + z*p/sqr(i); p:=p*x;                           z:=-z


 

 

 

end.


end;

writeln ('S=', S :6:2); readln


 

Пример 5.

Вычислить произведение:

(1 + sin2 )*(2 + sin3 )*...     (n сомножителей).

Найти сумму ряда: S = x - x2 /4 + x3/9 - x4/16...  (n слагаемых).

 

Рrogram Pr5; Var n, i: integer;

p: real;

begin

write('n=');    readln(n);                     p:=1; for  i:=1                     to         n do

p:=p* (i + sin(i+1));

writeln('p=', p:6:3);

end.

Результат:

n=5 p=131.645

 

Пример 6.

Подсчитать количество двузначных чисел, у которых сумма цифр нечетна.

 

Program Pr6;

Var         n, a, b, k:               integer; begin

k:=0;                for   n:=10 to 99 do begin a:= n div 10; b:=n mod 10;


 

 

 

end.


if                  (a+b) mod 2=1   then  k:=k+1; end;

writeln('k=',k)


 

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

Оператор повтора repeat состоит из заголовка repeat, тела и условия окончания

until.

Формат записи:

repeat

<оператор;>

<оператор>

until <условие окончания цикла>;

Операторы, заключенные между словами repeat и until, являются телом цикла. Вначале выполняется тело цикла, затем проверяется условие выхода из цикла. Именно поэтому цикл, организованный с помощью оператора repeat, в любом случае выпол- нится хотя бы один раз. Если результат булевского выражения равен False, то тело цикла активизируется еще раз; если результат True, происходит выход из цикла.

Цикл repeat часто называют циклом с постусловием, или циклом "ДО", так как он пре- кращает выполняться, как только значение выражения условия, записанного после слова until, равно True (истина).

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

 

Пример 7.

Протабулировать функцию y:=sin(x)*x интервале [-p/2,p/2] с шагом p/10.

 

Program pr7; Var x, y: real; begin

x:=-pi/2; repeat

y:=sin(x)*x; writeln('x=',x:8:2,' y=',y:8:2); x:=x+pi/10

until x>pi/2;


end.

Пример 8. Вычислить сумму Program pr8;

Var S, e, slag: real; k: integer;

begin


S =         i

(i + 1)2


 

с заданной точностью E=0.0001.


e:=0.0001; s:=0; k:=1;


 

 

 

 

 

 

end.


slag:= k/sqr(k+1); repeat

s:=s+slag; k:=k+1;

slag:=k/sqr(k+1); until slag<e;

write (‘s=’, s:6:2);


 

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

Оператор while (пока) часто называют оператором цикла с предусловием за то, что проверка условия выполнения тела цикла производится в самом начале оператора.

Формат записи:

while <условие продолжения повторений> do

<тело цикла>;

Условие - логическое выражение, тело цикла - простой или составной оператор. Перед каждым выполнением тела цикла вычисляется значение выражения усло-

вия. Если результат равен True, тело цикла выполняется и снова вычисляется выраже- ние условия. Если результат равен False, происходят выход из цикла и переход к пер- вому после while оператору.

Цикл while может не выполниться ни разу, если при первой проверке условие оказалось ложным (False).

 

 

Пример 9.

Задана арифметическая прогрессия                  -21; - 16;… Определить номер первого по- ложительного члена прогрессии.

a очередной член прогрессии,           n его порядковый номер

 

Program Pr9; var

a, n: integer; begin

a:= -21;             n:=1;                  {задаем начальные значения}

while a<=0 do begin                   {пока очередной член прогрессии меньше либо ра

a:=a+5; n:=n+1;                           равен 0, вычисляем следующий член прогрессии и end;

и его порядковый номер}

writeln(‘n=’, n);                          {выводим номер 1-го положительного члена

прогрессии}

end.

Результат:

n=6

 

Пример 10. Первоначальный вклад составил S рублей. Через сколько лет сумма вкла- да более, чем в 2 раза превысит первоначальный вклад, если годовой процент состав- ляет x%.

Например, S=1000 р, x=10%


1 год S=1000+1000*10/100=1100

2 год S=1100+1100*10/100=1210

 

Program pr10;

Var s, sum, x: real; n: integer;

Begin

Write(‘S=’); Readln(S);

Write(‘x=’); Readln(x); Sum:=2*s; n:=0;

While S<=Sum do begin s:=s+s*x/100; n:=n+1;

end;

write('через ', n, лет’);

end.

 

Вложенные циклы

Циклическая конструкция может содержать в теле цикла другой цикл. Такие кон- струкции называют вложенными циклами. Глубина вложения и тип циклов может быть различными.

Например, a) For . . . do – внешний цикл

While . . . do внутренний цикл данном случае глубина = 2)

b) While . . . do For . . . do

Repeat

. . .

Until (глубина =3)

Рассмотрим механизм работы вложенных циклов на примере: For a:=1 to 2 do

For b:=1 to 3 do Writeln(‘a=’, a, b=’, b);

a=1 a=1 a=1

b=1 b=2 b=3

выполняется внутренний цикл по b при

a=1

a=2

b=1

выполняется

a=2

b=2

внутренний

a=2

b=3

цикл по b при

 

 

a=2

Параметр внешнего цикла не меняет свое значение до тех пор, пока внутренний цикл не завершит свою работу.

Пример 11. Вывести на экран таблицу Пифагора. внутренний цикл (по j)


1                     2     3     4     5     6     7     8     9


1

2

3

4

5

6

7

8

9

 

Program pr11; var

i, j: integer;

Begin

for i:=1 to 9 do begin

for j:= 1 to 9 do write(i*j:4);

writeln; end;

end.

 

Внутренний цикл по j формирует очередную (i-ю) строку таблицы. Writeln – пере- вод курсора на новую строку.

 

Повторить k разПример 12. Вводятся k натуральных чисел. Найти сумму цифр каждого из них.

1.	Ввести число N

2.	Найти сумму его цифр
3.	Вывести результат

 

Program primer; var

n, s, a, i, k: integer; begin

write (‘k=’); readln(k); for i:=1 to k do

begin

Write(‘n=’); readln (n); s:=0;

Repeat

a:=n mod 10; s:=s+a;


n:=n div 10; until n=0; writeln (‘s=’,s);

end; end.

Контрольные вопросы

1.     Операторы цикла. Общая характеристика.

2.     Оператор цикла for. Форматы записи, описание работы цикла, ограничения ис- пользования параметра цикла.

3.     Примеры использования оператора for. Различие to и downto.

4.     Оператор цикла Repeat. Формат записи, особенности использования.

5.     Примеры программ с использованием оператора repeat.

6.     Оператор цикла while. Формат записи, описание работы цикла.

7.     Механизм работы вложенных циклов