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.

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

Ответ: тот же


 

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

2951. Внутрифирменное планирование 70 KB
  Внутрифирменное планирование Тема включает два раздела: Базовые аспекты внутрифирменного планирования. Перспективное планирование и разработка бюджета предприятия. Базовые аспекты внутрифирменного планирования Вопросы: Цели ...
2952. Перспективное планирование и разработка бюджета фирмы 60.5 KB
  Перспективное планирование и разработка бюджета фирмы Вопросы: Цели и содержание перспективного планирования Долгосрочное и среднесрочное стратегическое планирование. Оперативное (текущее) планирование и разработка бюджета. Цели и содержани...
2953. Функции организации и контроля в новых условиях хозяйствования 73.5 KB
  Функции организации и контроля в новых условиях хозяйствования Тема включает два раздела: Функция организации и формы управленческого контроля. Экономический анализ в системе управленческого контроля. Содержание функции организации в современн...
2954. Управленческий контроль как функция предприятием 63.5 KB
  Управленческий контроль как функция предприятием Вопросы: Содержание и формы управленческого контроля Анализ хозяйственной деятельности и управленческий контроль фирмы. Методика анализа хозяйственной деятельности. Показатели,...
2955. Деревянные конструкции, область их применения 313 KB
  Деревянные конструкции, область их применения. Достоинства и недостатки древесины и деревянных конструкций. Влияние пороков древесины на ее прочность. Породы древесины, пиломатериалы и листовые материалы на основе древесного сырья. Физические и меха...
2956. Пилотажно-навигационные комплексы. Барометрический канал измерения высоты 436.5 KB
  Пилотажно-навигационные комплексы. Барометрический канал измерения высоты Назначение пилотажно-навигационных комплексов, их разновидности. Авиационной навигацией называется тот раздел навигации, в котором рассматривается раздел вождения самолетов ...
2957. Модернизация планировочных решений квартир, их элементов, секций и здания в целом 199.5 KB
  Модернизация планировочных решений квартир, их элементов, секций и здания в целом. Первым параметром здания является его конструктивная схема. Конструктивные схемы зданий, подлежащих реконструкции, можно разделить на пять видов. Однопролетная схема ...
2958. Техническая эксплуатация кирпичных стен гражданских зданий 71.5 KB
  Техническая эксплуатация кирпичных стен гражданских зданий. Эксплуатационные качества наружных и внутренних стен, факторы и причины, влияющие на них. Оценка технического состояния стен при эксплуатации. Причины контроля за деформациями в системах зд...
2959. Система воздушных сигналов 916 KB
  Система воздушных сигналов. НАЗНАЧЕНИЕ СИСТЕМ ВОЗДУШНЫХ СИГНАЛОВ Одним из важнейших параметров полета летательного аппарата (ЛА) является его скорость. В основу принципа действия современных бортовых средств измерения параметров движения летательн...