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.

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

Ответ: тот же


 

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

76670. Выходные дни 32.61 KB
  Одним из главных способов достижения реализации является труд как неоплачиваемый так и оплачиваемый. Выбрав тему реферата Выходные дни мы более подробно познакомимся с особенностями и правилами регулирования отдыха работников.
76671. Уголовная ответственность за экологические преступления 74 KB
  Охрана окружающей природной среды - одна из наиболее актуальных проблем современности. Научно-технический прогресс и усиление антропогенного давления на природную среду неизбежно приводят к обострению экологической ситуации: истощаются запасы природных ресурсов...
76672. Соціально-політичне і економічне становище українських земель у XIV – першій половині XVII століття 47 KB
  Невтомною працею селян підвищувалась урожайність землі її продуктивність. У них пан примушував навколишніх селян молоти зерно беручи за помел побори. Працею сотень селян у яких пан забирав землю в фільварках будували млини комори хліви спиртогорілчані підприємства заводи пивоварні...
76673. Б. А. ТАРАШКЕВІЧ – АЎТАР ПЕРШАЙ “БЕЛАРУСКАЙ ГРАМАТЫКІ” 93 KB
  Мова – гэта не толькі сродак зносін людзей, але і важнейшы элемент нацыянальнай культуры кожнага народа. Гэта і выклікае цікавасць носьбітаў мовы да самой мовы, да яе гісторыі, да вытокаў яе фарміравання і гістарычных умоў функцыянавання...
76674. Тождество исков 48.21 KB
  Внешнее тождество исков подразумевает под собой сравнение двух и более исков на предмет того чтобы не допустить рассмотрение одного и того же иска повторно. Вопрос о тождественности исков в литературе обычно рассматривают в контексте вопроса об элементах иска так как именно...
76675. Гломерулонефриты. ХПН. Стоматологический статус. Тактика стоматолога 76 KB
  Диспепсические нарушения проявляются потерей аппетита отвращением к еде жаждой сухостью в полости рта тошнотой рвотой. Изменения слизистой оболочки полости рта являются следствием вторичных нарушений обменного характера нередко изменения обусловлены явлениями диспепсии.
76676. Формы и виды обучения 42.94 KB
  Отсутствие первой части превращает деятельность в хаотическое скопление отдельных действий без ясной и осознанной цели, когда человек не видит личностного смысла в совершаемых действиях, не воспринимает их как значимые, важные, необходимые для себя.
76677. Права и обязанности младшего и среднего медицинского персонала. Дисциплинарная, административная, гражданско –правовая, уголовная ответственность в деятельности медработника 68 KB
  Пенсионные гарантии Обязанности и ограничения налагаемые на медицинских работников Запреты налагаемые на медицинских работников Ограничения налагаемые на медицинских работников Обязанности медицинских работников Основные права и гарантии медицинских работников...
76678. From track and field athletics history 34.42 KB
  In an extreme antiquity the person needed to be able to run quickly, dexterously to overcome various obstacles, to throw any shells. From ability to catch up with the person and neatly to strike production, from ability to be resistant and tempered in fight against...