34854

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

Лекция

Информатика, кибернетика и программирование

Для любого оператора цикла вход в цикл возможен только через его начало выход осуществляется как вследствие естественного окончания цикла так и путем выполнения оператора перехода GOTO или процедур выхода содержащихся внутри цикла. Счетный оператор цикла FOR реализует циклический процесс с известным числом повторений и имеет две формы записи: Первая форма позволяет наращивать параметр цикла на единицу: FOR параметр цикла := min.значение DO оператор ; параметр цикла это переменная целого либо любого порядкового типа min и mx...

Русский

2013-09-08

77 KB

7 чел.

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

Для многократного повторения одних и тех же действий в ТР предусмотрены три оператора цикла:

1) счетный оператор цикла (оператор цикла с параметром) - FOR

2) оператор цикла с предусловием - WHILE

3) оператор цикла с постусловием – REPEAT

Если число повторений цикла (или итераций) заранее неизвестно, однако известно условие завершения цикла, в таких случаях примеряются операторы  WHILE и REPEAT.

Если число повторений известно, то применяется оператор FOR.

 

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

Счетный оператор цикла FOR реализует циклический процесс с известным числом повторений, и имеет две формы записи:

Первая форма позволяет наращивать параметр цикла на единицу:

FOR <параметр цикла>:= <min.значение> ТО <mаx.значение> DO <оператор>;

<параметр цикла> - это переменная целого либо любого порядкового типа, <min> и <max> значения - это выражения, определяющие соответственно начальное и конечное значения параметра цикла.
Их типы должны быть совместимыми для присваивания с параметром цикла.

Вторая форма позволяет уменьшать на единицу значение параметра цикла:

FOR<параметр цикла>:=<max.значение> DОWNTO<min.значение> DO 

<оператор>;

Если  начальное значение превышает (или не превышает во второй форме) или равно конечному значению с самого начала, <оператор> (стоящий после DO) не выполнится ни разу.

Вот примеры оператора цикла с параметром:

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

Program L_1;

   var p, x, i: integer;

     begin

      writeln('введите x');

        read(x);

          p:=1;

           for i:=1 to 5 do

                p:=p*sqr(x);

               writeln('p=',p);

      end.

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

F9 – ctrl+F9 – alt+F5 –

получим результат

введите x                                                                     

3                                                                             

p=59049  

                                                                   

введите x                                                                     

5                                                                             

p=9765625   

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

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

Program L;

 var i: char;

   begin

     for i:='z' downto 'a' do

       write(i,’ ‘);

   end.

---------

ответ:

z y x w v u t s r q p o n m l k j i h g f e d c b a

В этом примере оператор цикла с параметром использован для вывода букв латинского алфавита в обратном порядке (с z до a). Дело в том, что тип Char является порядковым, причём буквы начала алфавита (как значения типа Char), считаются меньше букв, взятых в конце алфавита. Не будет, например, ошибочным неравенство

                             A<B;  d<f

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

Program L;

 var i:integer;

   begin

    writeln;

    for i:=170 downto 100 do

       write(chr(i),’ ‘);

   end.

---------

ответ:

к й и з ж е д г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Х Ф У Т С Р П О Н М Л К Й И З Ж Е Д Г В Б А ⌂ ~ } | { z y x w v u t s r q p o n m l k j i h g f e d

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

 Program L;

 var i:char;

   begin

    writeln;

     for i:='z' downto 'a' do

       write(ord(i),' ');

   end.

----------

Ответ:

122 121 120 119 118 117 116 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100 99 98 97

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

Пример:

 Вычислить Y=1+1/2+1/3+…+1/N;

Для реализации программы необходимо многократно произвести вычисления по формуле Y=1+1/i при изменении параметра i от 1 до N 

------------------------------------------------------------------------------------------------                                                                                                                                                                                                   Реализация 1: 

Program L_2;

var i, N: integer;

    y: real;

  begin

     writeln('введите N');

     read(N);

      y:=0;

       for i:=1 to N do

         y:=y+1/i;

         writeln('y=',y:5:2);

   end.

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

Ответ:

введите N

6

y= 2.45

введите N

2

y= 1.50

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

Реализация 2:  

Program L_2;

var i, N: integer;

    y: real;

  begin

     writeln('введите N');

     read(N);

      y:=0;

       for i:=N downto 1 do

         y:=y+1/i;

         writeln('y=',y:5:2);

   end.

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

Ответ:

введите N

6

y= 2.45

введите N

2

y= 1.50

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

Значение параметра цикла в теле цикла может не использоваться, а лишь выполнять функцию счетчика. Например, пусть необходимо вычислить Y=Xn. Тогда фрагмент тела программы запишется в следующем виде:

              .

              .

Y:=1;

 FOR i:=1  ТО  N  DO  Y=Y*X;

.

.

Пример вложенности операторов с применением оператора IF:

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

Program L5;

 var i, n: integer;

       p:longint;

  begin

    writeln('введите n');

      read(n);

       p:=1;

        for i:=1 to n do

           begin

           if i mod 2=0 then

              begin

               p:=p*i;

               writeln(p:8);

                end;

                 end;

       end.

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

Ответ:

введите n

6

      2

      8

     48

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

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

Оператор цикла с предусловием используется в случае, когда число повторений цикла заранее не известно и действия в цикле по условию могут ни разу не выполниться. Структура этого оператора имеет вид:

WHILE <условие> DO <оператор>;

WHILE«пока»;  DO – «выполнить».

где < условие> - это любое логическое выражение, истинность которого проверяется в начале каждой итерации (условие выполнения тела цикла), <оператор> - произвольный оператор языка, в том числе и составной.

Если условие истинно, то выполняется оператор, стоящий за ключевым словом DO. Если условие ложно, то производится выход из цикла.

После выполнения <оператора>, вновь вычисляется и анализируется <условие> и вновь в случае его истинности выполняется <оператор>. Эти действия повторяются до тех пор, пока <условие> не станет ложным.

Пример. Вычислить Y=1+1/2+1/3+...+1/N.  

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

       Программа с применением оператора WHILE может быть составлена в следующем виде:

Program L15_2;

  var

       i, n: integer;

        y: real;

 begin

    writeln(‘введите N’);

     read(N);

                         Y:=0;

                           i:=1;

while i<= N   do

                                                      begin

                                                                   Y:=Y+1/i;

i:=i+1

end;

                              writeln(‘y=’,y:5:2);

                end.

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

ответ:

введите n

7

  y= 2.59

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

    Пример:

   Для значения a=0.5 протабулировать функцию  при изменении аргумента x на интервале [0,2] с шагом равным dx=a/2.

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

Program L5_3;

 const a=0.5;

  var x, p: real;

   begin

    x:=0;

     while x<=2 do

                          begin

                             p:=sqr(x)*exp(((-x)*x)/a);

                             x:=x+a/2;

                              writeln(p:5:5);

                         end;

    end.

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

Ответ:

0.00000

0.05516

0.15163

0.18262

0.13534

0.06865

0.02500

0.00670

0.00134

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

Эта же задача, но результат требуется записать в виде таблицы

Program L5_3;

 const a=0.5;

  var x, p: real;

        n: integer;

   begin

      writeln('---------------------');

      writeln(' n   |   x    |     p    ');

      writeln('---------------------');

    x:=0;

    n:=0;

     while x<=2 do

            begin

             p:=sqr(x)*exp(((-x)*x)/a);

             x:=x+a/2;

             n:=n+1;

            writeln(n:3,'   ',x:5:2,'   ',p:5:5);

            end;

     writeln('----------------------');

    end.

_____________________________________________________

Ответ:

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

n  |    x    |     p

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

 1   0.25   0.00000

 2    0.50   0.05516

 3    0.75   0.15163

 4    1.00   0.18262

 5    1.25   0.13534

 6    1.50   0.06865

 7    1.75   0.02500

 8    2.00   0.00670

  9    2.25   0.00134

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

_____________________________________________________

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

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

                . . .

               <операторN>

UNTIL <условие_выхода>;

REPEAT«повторять до тех пор»;

UNTIL«пока не будет выполнено условие».

(PEREAT и UNTIL – зарезервированные слова).

<оператор1>. . .<операторN> - любой оператор ТР

<условие выхода> - выражение логического типа.

При истинности значения логического выражения <условие_выхода> выполняется выход из цикла. В данном операторе ключевые слова REPEAT и UNTIL выполняют роль операторных скобок, поэтому точку с запятой перед словом UNTIL не ставят.

Оператор цикла REPEAT отличается от WHILE 

    во-первых:

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

   во-вторых:

   оператор REPEAT выполняется до тех пор, пока условие равно false, и управление передаётся следующему (за repeat) оператору, когда условие становится равным true (для оператора while имеет место обратная зависимость).

Пример фрагмента программной реализации вычисления значения Y=1+1/2+1/3..+1/N при использовании оператора цикла с постусловием.

.

.

begin

Y:=0;

  i:=1;

Repeat

             Y:=Y+1/i;

                                  i:=i+1

                  until i>N;

       end.

Пример:

 Вычислить сумму с точностью E=0.00001

     Y=1+x/3+x2/5+x3/7+…+xn/(2n+1)+…

               где |x|<1,

     т.е. когда очередное слагаемое будет меньше E, мы заканчиваем вычисление.

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

Program l5_4;

 const e=0.00001;

   label M;

    var

       i, n: byte;

       x, y, r: real;

       begin

        M: writeln('введите x');

              read(x);

               if abs(x)>=1 then goto M;

                 y:=1;

                 n:=1;

                  repeat

                       r:=1;                 {расчёт x в степени n}

                       for i:=1 to n do {             ---\\---           }

                               r:=r*x;      {             ---\\---           }

                              y:=y+r/(2*n+1); {расчёт суммы, к итогу добавляется новое слагаемое}

                              n:=n+1         {переход к следующему слагаемому}

                                 until(r/(2*n+1))<e;

                                  writeln('y=',y:7:5);

           end.

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

Ответ:

введите x

0.5

y=1.24644

введите x

2

введите x

0.9

y=1.91674

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

Или эта же задача, но без r

Program l5_4;

 const e=0.00001;

   label M;

    var

       i, n: byte;

       x, y: real;

       begin

        M: writeln('введите x');

              read(x);

                if abs(x)>=1 then goto M;

                   y:=1;

                   n:=1;

                   repeat

                    y:=y+exp(n*ln(x))/(2*n+1); {расчёт суммы, к итогу добавляется новое слагаемое}

                           n:=n+1      {переход к следующему слагаемому}

                            until(exp(n*ln(x))/(2*n+1))<e;

                                writeln('y=',y:7:5);

           end.

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

Ответ: тот же


 

А также другие работы, которые могут Вас заинтересовать

81979. Великі українці. Маленькі історії про великі істини 94 KB
  Історико-пізнавальний проект передбачав підготовку учнів 5-8 класів на протязі двох місяців. Діти готували матеріал про одного або двох із запропонованих їм творчою групою (до якої входили вчителі та учні) представників із числа Великих українців (до їх числа входили українці обрані самими дітьми).
81980. Велетні чарівники 95.5 KB
  Формувати науковий світогляд та початкове уявлення про астрономію; дати елементарне уявлення про Всесвіт закріпити знання про воду та її значення розширити знання про повітря; розвивати пізнавальні інтереси вміння бачити красу і захоплюватися нею.
81981. ТО СВІТЛИЙ ВЕЛИКДЕНЬ ГОСПОДНІЙ ДИТЯЧИЙ ЗВЕЛИЧУЄ СПІВ 74 KB
  У нашого українського народу існує повір’я, що від тих батьків, які не дотримуються звичаїв, родяться діти, що стають вовкулаками. Вовкулака – це завжди похмурий, завжди чимось незадоволений чоловік; в день святого Юрія він перекидається вовком, бігає разом з іншими звірами по лісі...
81982. Великодні свята в Україні 891 KB
  Практична: розвивати комунікативні навички учнів у учнів; формувати вміння підтримувати бесіду використовуючи лексику з даної теми; розвивати культуру спілкування; вчити учнів виконувати проектпрезенту вати результати проектних досліджень; розвивати навички групової роботикри тичного...
81983. Проект з французької мови: Чому Великдень є улюбленим святом дітей? 182.5 KB
  Завдання: Збагатити знання про історію та традиції святкування Пасхи. Дібрати французькі та українські прислів’я та приказки до цього свята та зробити порівняльну характеристику. Скласти вітальні привітання до свята Великодня. Оформити проект до цього свята.
81984. ВЕРНІСАЖ РОКУ 257.5 KB
  Ознайомити учнів із поняттям текст формувати уявлення про текст як форму звязного висловлювання його характерні ознаки; розвивати вміння визначати тему тексту добирати заголовок до тексту відповідно до його змісту; збагачувати словниковий запас учнів; розвивати усне і писемне мовлення...
81985. Веселі старти 39 KB
  Мета. Створити атмосферу свята. Виховувати любов до фізкультури та спорту: розвивати руховий апарат, фізичні уміння та навички, зміцнювати здоров’я, виховувати почуття дружби, колективізму. Обладнання. М’ячі, скакалки, кубики, обручі, стрічки, дротики.
81986. ВЕСНА МИЛІША ВСІХ 72 KB
  Добрий день вам, люди добрі, що сидять в нашій господі. Раді з святом вас вітати, щастя і добра бажати. З початком весни, з першою весняною травичкою, ніжними квітами й дзвінким співом пташок приходить до нас і жіноче свято – 8 Березня. Це свято наших мам і бабусь.