34854

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

Лекция

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

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

Русский

2013-09-08

77 KB

5 чел.

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

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

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.

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

Ответ: тот же


 

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

63615. УПРАВЛІННЯ ПРИБУТКОМ 417.01 KB
  Ключовим завданням управління фінансами підприємства є досягнення та подальше забезпечення належного рівня конкурентоспроможності підприємства у короткостроковому та довгостроковому періодах. Прибуток розглядається в трьох основних аспектах: прибуток як вираження результату...
63616. Персонал организации (предприятия): организация и ОТ 143 KB
  Производительность труда: определение показатели. Резервы роста производительности труда. Организация труда на предприятии: нормирование труда виды норм методы нормирования труда. Оплата и мотивация труда: принципы организации формы и системы ОТ материальное стимулирование труда.
63617. ІНФОРМАЦІЙНЕ ЗАБЕЗПЕЧЕНН НАУКОВИХ ДОСЛІДЖЕНЬ 75.36 KB
  Інформація є засобом спілкування між людьми і відображає ії суспільні та виробничі взаємовідносини, а також різноманітні прояви матеріального світу. Тільки обмін інформацією між дослідниками через канали комунікацій або прямим спілкуванням на семінарах...
63619. ТЕОРЕТИЧНІ ОСНОВИ ІНВЕСТИЦІЙНОЇ ДІЯЛЬНОСТІ 72.5 KB
  Інвестиції це вкладення капіталу з метою його подальшого збільшення. Закон України Про інвестиційну діяльність†від 18 вересня 1991 року зі змінами і доповненнями визначає інвестиції як усі види майнових і інтелектуальних цінностей що вкладаються...
63620. Вимоги до проведення наукового дослідження 53.49 KB
  Вимоги до проведення наукового дослідження Наукове дослідження завжди повинне носити творчий характер наповнений постійним пошуком і експериментуванням. Наукове дослідження повинне бути потрібним актуальним спиратись на об'єктивні і перевірені дані.
63622. Государственный аппарат 328.52 KB
  По объему властных полномочий или по предмету ведения: Федеральные органы распространяют свою власть на территорию всего государства например Президент РФ Правительство РФ Федеральное Собрание РФ Верховный Суд РФ Высший Арбитражный Суд...