Вопрос 17.doc

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

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

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

Иконка файла материала Вопрос 17.doc

Вопрос 17.

Циклы.

Вычислительный процесс с многократным повторением однотипных вычислений для различных значений обрабатываемых величин (переменных) называется циклическим; повторяющиеся участки вычислений - циклами; изменяющиеся в цикле величины -переменными цикла.

Для организации циклов необходимо предусмотреть:

1) задание начальных значений переменным цикла перед первым его выполнением;

2) действия, повторяемые в цикле для различных значений переменных цикла (тело цикла);

3) изменение (модификацию) переменных цикла перед каждым новым его повторением;

4) проверку условия продолжения работы цикла и переход на начало тела цикла или окончание работы цикла и выход из него.

Вход в цикл возможен только через его начало.

Различают циклы с заданным и заранее неизвестным числом повторений. Циклы первого типа называют также циклами со счетчиком. Число повторений цикла подсчитывается с помощью специальной переменной (счетчика), для которой известны начальное и конечное значения, шаг изменения. Управление циклом осуществляется на основании сравнения текущего значения счетчика с его конечным значением. Переменную – счетчик называют параметром цикла, а сам цикл– циклом с параметром.

Примером цикла с параметром может служить задача табулирования функции.

Часто приходится сталкиваться с такими циклическими вычислительными процессами, когда число повторений цикла неизвестно, а задано некоторое условие его окончания. Такие циклы называются итерационными.  Примером итерационного циклического процесса служит задача вычисления суммы бесконечного ряда (если эта сумма существует) с заданной точностью.

Применение циклов в программе позволяет эффективно использовать машину, приводит к уменьшению длины программы и сокращению времени на ее составление и отладку.

В Турбо Паскале имеется три вида операторов цикла:

1) оператор цикла с параметром;

2) оператор цикла с предварительным условием;

3) оператор цикла с последующим условием.

 

4.3.1.  Оператор цикла с параметром

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

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

for <параметр>:= m1  to  m2  do

<оператор>;       {тело цикла}

или

for <параметр> := m1  to  m2  do

begin

<оператор 1>;

<оператор 2>;

. . . . . . . . . . . .

<оператор n>

end;

Параметр – переменная порядкового типа; m1 – выражение, определяющее начальное значение параметра цикла; m2 – выражение, определяющее конечное значение параметра цикла. Значения выражений m1 и m2 не могут быть типа real. Операторы 1, 2, ..., n образуют тело цикла. Цикл работает следующим образом:

1) вычисляются и запоминаются значения выражений m1 и m2;

2) параметру цикла присваивается значение  выражения m1;

3) значение параметра цикла сравнивается со значением выражения m2, если значение параметра меньше или равно m2, то выполняется тело цикла, в противном   случае – выход из цикла;

4) значение параметра цикла увеличивается на 1 и переходим к пункту 3).

Если m1>m2, то тело цикла не выполняется ни разу.

Оператор цикла, записанный в формате

for <параметр>:= m1  downto  m2  do

<оператор>;       {тело цикла}

работает следующим образом:

1) вычисляются и запоминаются значения выражений m1 и m2;

2) параметру цикла присваивается значение  выражения m1;

3) значение параметра цикла сравнивается со значением выражения m2, если значение параметра больше или равно m2, то выполняется тело цикла, в противном   случае – выход из цикла;

4) значение параметра цикла уменьшается на 1 и переходим к пункту 3).

Если m1<m2, то тело цикла не выполняется ни разу.

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

 

Пример 1. Найти среднее арифметическое N чисел и N!.

program SREDNEE_1;

var  N, F: integer;    X, S: real;

I: integer;  (параметр цикла}

begin

Writeln('Введите N ');               Readln(N);

S:=0;  F:=1;

for I:=1 to N do

begin

F:=F*I;                {подсчет N!}

Writeln('Введите очередное число Х ');              Readln(X);

S:=S+X                {подсчет суммы N чисел}

end;

S:=S/N;

Writeln ('Среднее арифметическое ', N:2, ' чисел равно ', S:6:2);

Writeln (' N! равно ', F)

end.

Пример 2. Составить программу, выводящую на экран буквы от Z до A.

program  BUKVI;

var i: char; (параметр цикла}

begin

for i:='Z' downto 'A' do

Write (i, ' ')

end.

 

4.3.2. Оператор цикла с предварительным условием

(с предусловием)

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

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

while <условие> do

<оператор>;

или

while <условие> do

begin

<оператор 1>;

<оператор 2>;

. . . . . .   

<оператор n>

end;

где <условие> – логическое выражение, <оператор> (или операторы 1, 2, ..., n) – тело цикла. Оператор цикла с предусловием работает следующим образом:  определяется значение истинности условия, если логическое выражение имеет значение TRUE (условие выполнено), то выполняется тело цикла, иначе (на FALSE) происходит выход из цикла. Если логическое выражение сразу принимает значение FALSE, то тело цикла не выполняется ни разу, а выполняется оператор, следующий в программе за оператором while.

Пример 1. (фрагмент программы)

 . . . . . .

A:=1;  N:=1;

while  2*A<=3*N+1  do

begin

A:=A+2;

N:=N+1

end;

. . . . . . .

Исполнение программы:

    A            1      

N            1       

2A<=3N+1      2£4 ? да    6£7 ? да     10£10 ? да     14£13 ? нет

A:=A+2            3                 5                7

N:=N+1            2                 3                4

 выход из цикла

Пример 2. Дана непустая последовательность положительных целых чисел, за которой следует 0 (это признак конца последовательности). Вычислить среднее геометрическое этих чисел.

В этой задаче неизвестно число чисел в последовательности. Поэтому нельзя воспользоваться оператором цикла с параметром.

Среднее геометрическое n чисел равно корню n – ой степени из их произведения.

program SREDNEE_2;

var x,p: integer;         n: integer;          SR: real;

Begin     n:=0;          p:=1;

Write ('Введите первое число последовательности X - ');           Readln (x);

while x<>0 do

begin      p:=p*x;             n:=n+1;

Write ('Введите очередное число X - ');               Readln (x);

end;

SR:=exp(ln(p)/n);

Writeln('Cреднее геометрическое n чисел послед-ти SR=',SR:8:2)

end.

4.3.3. Оператор цикла с последующим условием

(с постусловием)

Оператор цикла с постусловием используется, как правило, для организации итерационных циклов. Формат записи оператора:

repeat

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

until <условие>;

или

repeat

<оператор 1>;

<оператор 2>;

. . . . . .

<оператор n>

until <условие>;

Если телом цикла является составной оператор (операторы 1, 2, ..., n), то операторные скобки не используются. 

Оператор repeat – until работает следующим образом: тело цикла выполняется (по крайней мере один раз) до тех пор, пока логическое выражение (условие) имеет значение FALSE. На TRUE происходит выход из цикла и выполняется оператор, стоящий в программе за оператором цикла.

Выход из цикла можно организовать с помощью оператора GOTO.

Пример 1. Вычислить значения функции y=x*x   при x= 8, 6, 4, 2.

program FUN1;

var     x, y: integer;

begin       x:=8;

repeat

y:=x*x;

Writeln (x:3, y:5);

x:=x-2

until x=0

end.

Исполнение программы:

x начальное       8                       

y=x*x                 64            36             16            4  

вывод x,y          8    64       6    36      4     16      2   4

x=x-2                  6             4               2               0

x=0 ?                 6=0 ?        4=0 ?        2=0 ?       0=0 ?

(проверка)         Нет         Нет           Нет         Да

  выход из цикла

Замечание. В версии 7.0 в циклах REPEAT, WHILE, FOR можно использовать две стандартные процедуры BREAK, CONTINUE. Процедура BREAK позволяет досрочно выйти из цикла, не дожидаясь выполнения условия выхода. Процедура CONTINUE позволяет начать новую итерацию цикла, даже если предыдущая не завершена.

Пример 2. Среди десяти целых чисел найти первое отрицательное число и вывести его на экран дисплея.

program OTR_CHISLO;

const N=10;

var

X: integer;   i: byte;    L: boolean;

Begin    L:=False;

for i:=1 to N do

begin

Write('Введите очередное число X= ');     Readln(X);

if X>=0 then    Continue;

{X0, переход на следующее число}

Writeln('Первое отрицательное число = ', X, ‘Номер=', i);

L:=True;                           {найдено отрицательное число}

Break                                {выход из цикла}

end;

if not L then  Writeln('Отрицательных чисел нет');

Readln

end.