78205

Операторы организации итерационных циклов

Лекция

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

Если в цикле изменяется простая переменная то она является параметром цикла; если в цикле изменяется переменная с индексом то индекс этой переменной является параметром цикла. Для организации цикла с известным числом повторений в Pscl используется оператор for. Оператор цикла с предусловием While Если число повторений выполняемых в цикле заранее не известно или шаг приращения счетчика параметра цикла отличен от единицы то необходимо использовать оператор цикла с предусловием.

Русский

2015-02-07

145 KB

0 чел.

екция: Операторы организации итерационных циклов   Страница 8 из 8 

Оглавление

[1] Оглавление

[2] Оператор цикла с предусловием While

[3] Оператор цикла с постусловием Repeat

[4] Правила использования операторов цикла

[4.1] Примеры алгоритмов циклической структуры

[4.2] Контрольные вопросы и задания

Комбинированный урок №7

Тема: Операторы организации итерационных циклов.

Цель: формирование знаний о форматах операторов While, Repeat, навыков применения операторов, приемов составления схем алгоритмов циклических вычислительных процессов с пред- и постусловием. Примеры использования операторов.

Различают циклы с известным числом повторений (цикл с параметром - FOR) и итерационные (с пред- и постусловием −WHILE и REPEAT).

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

Если в цикле изменяется простая переменная, то она является параметром цикла; если в цикле изменяется переменная с индексом, то индекс этой переменной является параметром цикла.

Для организации цикла с известным числом повторений в Pascal используется оператор for.

Оператор цикла с предусловием While

Если число повторений, выполняемых в цикле, заранее не известно или шаг приращения счетчика (параметра) цикла отличен от единицы, то необходимо использовать оператор цикла с предусловием. Оператор цикла этого вида имеет вид:

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

где условие - это логическое выражение, от значения которого зависит- продолжать повторы или завершить цикл;

оператор - любой простой или составной оператор.

Выполнение оператора начинается с вычисления значения логического выражения. Если оно имеет значение "True" (истина), то выполняется оператор (операторы), входящий в цикл. Выполнение цикла продолжается до тех пор, пока логическое выражение в его заголовке не примет значение "False" (ложно). Если выражение равно "False" при первом же витке цикла, то работа цикла завершится, а входящие в него операторы не выполнятся ни разу. Поскольку в цикле типа WHILE...DO условие завершения его работы проверяется до выполнения входящего в него оператора, такой цикл называется "оператор цикла с предусловием".

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

Program Primer; 

Var K:integer; 

Begin K:=0; 

WHILE K<=10 DO 

begin K:=K+2; Write('K= ',K:3) end; 

Readln 

End. 

Оператор цикла с постусловием Repeat

Цикл этой разновидности применяется в случаях, когда число повторений оператора, входящего в тело цикла, заранее не известно. Такой цикл похож на цикл с предусловием, но в данном случае условие завершения повторов проверяется после выполнения операторов, составляющих тело цикла. Общий вид оператора цикла с постусловием таков:

REPEAT

оператор1, оператор2, ... , операторN

UNTIL условие;

где оператор1, оператор2, ... , операторN - операторы тела цикла;

условие - логическое выражение, диктующее завершение повторов.

Оператор цикла с постусловием начинается с выполнения операторов внутри цикла. Затем проверяется истинность логического условия, стоящего после слова UNTIL. Если это условие справедливо (True), то осуществляется выход из цикла. Если же значение логического выражения ложно (False), то выполнение операторов тела цикла повторяется, после чего снова проверяется истинность логического условия.

Пример программы, использующей оператор цикла с постусловием:

Program Primer; 

Var K:Integer; 

Begin 

K:=0; 

REPEAT 

K:=K+2; Write('K= ',K:3) 

UNTIL K>10; 

Readln 

End. 

Правила использования операторов цикла

При использовании операторов цикла следует учитывать следующие особенности:

Цикл While. Проверяется условие, расположенное в заголовке цикла. Если оно является истинным, то выполняется тело цикла. По завершению его выполнения снова проверяется условие, находящееся в заголовке цикла и т.д. Так продолжается до тех пор, пока условие не станет ложным. В этом случае будет осуществлен переход к конструкции, следующей за телом цикла.

    При работе с этой конструкцией цикла важно следить за тем, чтобы на каком-то шаге выполнения тела цикла проверяемое условие обязательно стало ложным. Если этого не произойдет, то выход из цикла будет невозможен. В этом случае говорят, что программа "зациклилась".

    Цикл Repeat..Until. Встретив служебное слово Repeat компьютер "запоминает" его местоположение на случай необходимости повторного выполнения тела цикла. Таким образом, служебное слово Repeat отмечает начало тела цикла. После выполнения тела цикла проверяется условие, расположенное за служебным словом Until. Если оно является ложным, то снова выполняется тело цикла и т.д. Когда условие станет истинным, будет осуществлен переход к следующей конструкции, идущей после цикла.

  1.  Операторы, входящие в цикл Repeat...Until, всегда выполняются хотя бы один раз, поскольку истинность логического выражения в цикле этого типа проверяется после операторов, входящих в тело цикла. При использовании цикла типа While...Do могут быть ситуации, когда операторы, входящие в цикл, не будут выполнены ни разу, если логическое выражение изначально имеет значение "FALSE".
  2.  Цикл Repeat...Until выполняется, пока логическое выражение имеет значение FALSE. Цикл While...Do выполняется, пока логическое выражение имеет значение TRUE. Этот нюанс следует учитывать при замене цикла одного типа другим.

Program Whl; 

Var i:integer; 

Begin 

      i:=1; 

      WHILE i<=10 DO 

      begin 

              Writeln('Привет'); 

               i:=i+1 

      end; 

      Readln 

End. 

Program Rep; 

Var i:integer; 

Begin 

     i:=1; 

     REPEAT 

              Writeln('Привет'); 

               i:=i+1 

              UNTIL i>10; 

     Readln 

End. 

  1.  Если тело цикла While...Do состоит из нескольких операторов, их следует обрамлять операторными скобками begin...end, образующими составной оператор. В цикле типа Repeat...Until операторные скобки не нужны.
  2.  Одной из опасностей, возникающих при использовании оператора цикла, является "зацикливание", т.е. возникновение ситуации, когда программа не выходит из цикла, бесконечно повторяя входящие в него операторы:

k1:=1;    WHILE k1<5 DO Writeln('Бесконечный цикл');

  1.   Если в программе встретится такой фрагмент, то экран заполнится строками с фразой "Бесконечный цикл", выдача которой в режиме прокрутки (Scrolling) будет длиться до тех пор, пока программистом не будут приняты действия по принудительному завершению работы программы. Вывести программу из бесконечного цикла можно, дважды нажав сочетание клавиш Ctrl и Break, после чего надо нажать клавишу ESC.
  2.  Зацикливания не произойдет, если операторы, входящие в тело цикла, будут влиять на условие, определяющее завершение цикла:

k1:=1;

WHILE k1<5 DO 

Begin

Writeln('Цикл');

k1:=k1+1

end;

  1.  В этом фрагменте цикл выполнится ровно 4 раза и компьютер перейдет к следующим командам.
  2.  При использовании операторов цикла с предусловием и постусловием необходимо быть осторожным в тех случаях, когда в логическом выражении (условии окончания цикла) фигурируют вещественные переменные. Следует помнить, что в компьютере значения выражений вещественного типа вычисляются приближенно, т.е. с небольшой погрешностью. Например, вещественное число 1.0 в компьютере может быть представлено как 0.99999999 или как 1.00000001 . Поэтому фрагмент

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

REPEAT

...........

UNTIL X=B;

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

где X, B : Real, будет неправильным, хотя с математической точки зрения он верен. Условие X=B скорее всего никогда не выполнится, в результате произойдет "зацикливание" программы. Не следует управлять циклом с помощью логического выражения, в котором вещественные переменные проверяются на строгое равенство.

Примеры алгоритмов циклической структуры

Пример 1. Для вычисления В в 9-й степени при В < 0, когда Exp(9*Ln(B)) недопустим, можно использовать следующий цикл:

………

K:=1; P:=1;

While K <= 9 Do

Begin

P:=P*B;

K:=K+1

End; 

Пример 2. Составить программу вычисления и вывода на печать таблицы значений функции , при Х1 <= Xi <= Хn с шагом dX. Здесь а=-105; b=-3,62e-2; c=1,1; Х1 =2,65; Хn =5,55; dX=0,15.

Program Cikl_1;

Var  A,B,C: Real;

X,Xn,Xk,dX : Real;

Z: Real;

Begin

Read(A,B,C,Xn,Xk,dX);

X:=Xn;

While X <= Xk Do

Begin

Z:=A*Exp(B*X - C*X*X);

Writeln(' X=',X:5:2,' ':5,'Z=',Z:10);

X:=X+dX

End

End.

Пример 3. Вычислить В в 9-й степени при В<0 с использованием оператора цикла Repeat.

K:=1; P:=1;

Repeat

P:=P*B;

K:=K+1

Until K > 9;

Пример 4. Составить программу для вычисления и вывода на печать таблицы значений функции   при х=5,6,...,25;  а=15.27е-2.

Program Cikl_2;

Var  A,Y : Real;

X : Byte;

Begin

A:=15.27e-2;

X:=5;

Repeat

Y:=Sin(A*X) * Sqrt(X);

WriteLn(' X=',x,' Y=',y:10);

X:=X+1

Until X > 25

End.

Операторы тела цикла будут выполняться до тех пор, пока Х не станет больше 25.

Пример 5. Найти произведение натуральных чисел меньших 200 и кратных 7.

uses crt;

var  m,n:word;

l:longint;

begin

clrscr;

l:=1;

m:=1;

while m<200 do

begin

if m mod 7 = 0 then l:=l*m;

inc(m);

end;

writeln(l);

readkey;

end.

Пример 6. Для введенной последовательности целых чисел, признаком конца которой является ноль, определить максимальное число, сумму всех чисел и количество чисел удовлетворяющих условию: число цифр 7 в числе равно 3

uses crt;

var n,m,max,s,k,p:longint;

   st:string;

begin

clrscr;

max:=-2147483647;

s:=0;

k:=0;

repeat

read (n);

if n>max then max:=n; {поиск максимального значения числа}

s:=s+n; {здесь находится счетчик чисел}

str(n,st); {преобразование целого числа в символьное значение}

repeat

p:=0;

p:=pos('7',st); {поиск значения '7' в строке st и сохранение номера позиции в Р,  откуда начинается найденный символ}

if p<>0 then

begin

inc(m);

delete(st,1,p);{удалить количество символов Р из строки ST, }

{начиная с позиции 1}

end;

until p=0;

if m=3 then

begin

inc(k);

m:=0;

end;

until n=0;

writeln ('max: ',max,'   summa: ',s,'   k: ',k);

readkey;

end.

Пример 7. Вычислить и вывести на экран значения функции y=x3 на интервале изменения х, равном [a, b] в n равноотстоящих точках интервала. Найти:

  •  сумму тех значений  функции, которые удовлетворяют условию –10 < y < 10;
  •  произведение тех значений  функции, целая часть которых делится на 3 без остатка;
  •  количество  положительных значений  функции в точках с нечетными номерами;
  •  наибольшее из вычисленных значений функции в расчетных точках.
  •  наибольшее из вычисленных значений функции в расчетных точках.

Следующий рисунок иллюстрирует задачу. Требуется вычислить значения функции в n точках, изменяя переменную x от а до b с постоянным шагом      

 

 

Исходные данные задачи:

a, bлевая и правая границы интервала изменения x;

n – количество расчетных точек.

Введем следующие обозначения:

x – изменяющийся аргумент функции;

yвычисляемое значение функции;

dxшаг изменения значения x;

iномер расчетной точки, изменяющийся от 1 до n с шагом 1;

sumсумма вычисленных значений функции, удовлетворяющих условию –10 < y < 10;

pr - произведение вычисленных значений функции, целая часть которых делится на 3 без остатка;

kol - положительных значений  функции в точках с нечетными номерами;

maxнаибольшее из вычисленных значений функции.

 

Фрагмент блок-схемы

Используем для организации цикла оператора For.  

Программа

Комментарии

Program Primer5_7_1;

Var

a, b, dx, sum, pr, x, y, max: real;

n, kol, i: integer;

 

Объявляем переменные

Begin

Writeln(‘Введите a и b’); Readln(a,b);

Writeln(‘Введите количество расчетных точек N>1’);

Readln(n);

 

Вводим исходные данные

dx:=abs(b-a)/(n-1);

Вычисляем шаг изменения x

x:=a;

For  i:=1  to  n  do

begin

Y:=x*x*x;

Writeln (x:5:2, y:8:2);

x:=x+dx;

end;

Вычисляем значения функции и выводим их на экран

sum:=0;

x:=a;

For  i:=1  to  n  do

begin

Y:=x*x*x;

If (y>-10) and (y<10) then sum:=sum+y;

x:=x+dx;

end;

Writeln(‘Сумма=’,sum:8:3);

Вычисляем сумму значений функции, удовлетворяющих условию  –10<y<10 Комментарий: добавляем к сумме только те значения переменной  y, которые удовлетворяют условию (y>-10) and (y<10)

pr:=1;

x:=a;

For  i:=1  to  n  do

begin

Y:=x*x*x;

If (trunc(y) mod 3 =0 ) then pr:=pr*y;

x:=x+dx;

end;

Writeln(‘Произведение=’,pr:8:3);

Вычисляем произведение тех значений  функции, целая часть которых делится на 3 без остатка

Комментарий: для проверки делимости на 3 без остатка вычисляется целая часть y с помощью функции trunc(y),затем проверяется условие (trunc(y) mod 3 =0)- равен или нет нулю остаток от целочисленного деления (операция mod вычисляет остаток от целочисленного деления)

kol:=0;

x:=a;

For  i:=1  to  n  do

begin

Y:=x*x*x;

If (y>0) and (i mod 2=1) then kol:=kol+1;

x:=x+dx;

end;

Writeln(‘Количество =’,kol);

Вычисляем количество положительных значений  функции в точках с нечетными номерами 

Комментарий: для проверки нечетности номеров точек (переменная i) используется условие

i mod 2=1

Если значение переменной i нечетное, то остаток от целочисленного деления равен 1.

max:=a*a*a;

x:=a;

For  i:=1  to  n  do

begin

Y:=x*x*x;

If max<y then max:=y;

x:=x+dx;

end;

Writeln(‘Наибольшее значение=’, max:8:3);

End.

Вычисляем наибольшее значение функции в расчетных точках

Комментарий: за начальное значение переменной max принимается значение функции в точке x=a. В цикле вычисляются новые значения, каждое из которых сравнивается со значением max. Если новое значение функции оказывается больше чем значение max, то оно принимается за новое значение max.

  1.  Разложение целого числа Х на простые множители. Будем делить Х на p, начиная с p = 2. Если делится нацело, то p — множитель, если не делится, то увеличиваем p на 1, пока Х <> 1.

read(x);

p := 2;

repeat

 if x mod p = 0 then  begin    write(p, ' ');    x := x div p;  end

 else   p := 1+p;

until x = 1;


Контрольные вопросы и задания

  1.  Какие виды циклов существуют? В чем их отличие?
  2.  Какова структура оператора цикла с предусловием? Как выполняется цикл с предусловием?
  3.  Какого типа должны быть параметр цикла с предусловием?
  4.  Какова структура оператора цикла с постусловием? Как выполняется цикл с постусловием?
  5.  Какого типа должны быть параметр цикла с постусловием?
  6.  Может ли один цикл быть вложен внутрь другого?
  7.  В чём заключаются правила использования операторов цикла с пост- и предусловием?
  8.  Сколько раз исполнится фрагмент программы?

K:=0;

 WHILE K<=10 DO 

begin K:=K+2; Write('K= ',K:3) end; 

  1.  Сколько раз исполнится фрагмент программы?

K:=0;

 WHILE K<=10 DO 

begin K:=K+3; Write('K= ',K:3) end; 

  1.  Сколько раз исполнится фрагмент программы?

m:=1;

while m<20 do

begin

m:=m*3;

writeln(m);

end;

  1.  Сколько раз исполнится фрагмент программы?

m:=1;

while m<>20 do

begin

m:=m*2;

writeln(m);

end;


 

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

36741. ОРГАНИЗАЦИЯ ЗАЩИТЫ НАСЕЛЕНИЯ В ВОЕННОЕ ВРЕМЯ 112.5 KB
  Оружие массового поражения обладает огромными поражающими возможностями, в связи с чем важное значение имеют надежная защита населения на всей территории страны и обеспечение устойчивости работы всех объектов экономики в случае применения этого оружия.
36742. Изучение свободных колебаний связанной системы тел 174 KB
  Цель работы: Определение периода колебаний и коэффициента затухания системы содержащей груз блок и пружину. Гармоническими называются колебания при которых изменение фйзической величины например смещения груза у с течением времеи закон колебаний выражается формулой или . амплитуда колебаний; фаза колебаний; циклическая частота; Любое механическое колебание происходит с затратами энерпш на работу протнв сил трения.
36743. Определение длины волны и частоты электромагнитного колебания с помощью схемы Лехера 203 KB
  Цель работы: исследование распределения амплитуд напряжения и тока вдоль двухпроводной линии при различных режимах её работы на сверхвысоких частотах (СВЧ) и определение длины волны генератора СВЧ волн.
36744. Изучение стоячих волн 45 KB
  Цель работы: изучение стоячих волн и определение скорости распространения волны в натянутом шнуре.
36745. Изучение основных свойств волновых явлений 211 KB
  Измерьте зависимость амплитуды принимаемого приемником сигнала показания микроамперметра от угла поворота приемника относительно его начального положения в пределах от до поворачивая подвижную скамью с приемником вокруг неподвижной оси через . Угол поворота 5 10 15 20 25 30 35 40 45 90 Амплитуда 465 39 23 125 35 1 05 05 05 0 Таблица 2. Угол поворота 5 10 15 20 25 30 35 40 45 90 Амплитуда 40 245 105 15 1 1 1 05 05 0 Рис. Измерьте зависимость показаний микроамперметра от угла поворота детектора влево и вправо от центра...
36746. Работа с электронными каталогами и электронными библиотеками 75.5 KB
  Задание №1 Порядок выполнения: Загрузите файл “домашней†титульной страницы Home Pge: Библиотеки Российской академии наук БАН набрав ее электронный адрес URL: http: www. Задание №2 Работа с электронными каталогами библиотек Понятие электронный каталог сформировалось в США где этот термин имеет несколько значений. Современные электронные каталоги реальных библиотек должны обеспечивать не только быстроту и точность поиска но и сервисность т.
36747. Дискретизация непрерывных сигналов 164.5 KB
  Для этого из бесконечного множества значений этой функции параметра сигнала выбирается их определенное число которое приближенно может характеризовать остальные значения. Область определения функции разбивается точками x1 x2 xn на отрезки равной длины и на каждом из этих отрезков значение функции принимается постоянным и равным например среднему значению на этом отрезке; полученная на этом этапе функция называется в математике ступенчатой. Следующий шаг проецирование значений “ступенек†на ось значений функции ось ординат....
36748. КОНТРОЛЬ РАЗМЕРОВ ЦИЛИНДРИЧЕСКИХ ДЕТАЛЕЙ 348 KB
  Лабораторная работа №3 КОНТРОЛЬ РАЗМЕРОВ ЦИЛИНДРИЧЕСКИХ ДЕТАЛЕЙ Излагается методика измерения размеров цилиндрических деталей с помощью различных универсальных измерительных средств и оценки годности данной детали в соответствии с заданными требованиями по чертежу. Цель работы приобрести первичные практические навыки в выполнении измерений с помощью различных универсальных измерительных средств приобрести навыки в оценке годности детали по линейным размерам I. С помощью выбранных универсальных измерительных средств определить...
36749. Обработка результатов косвенных измерений: классическая задача о методе наименьших квадратов 134.5 KB
  Цель работы: изучение задачи и методов обработки результатов измерений; исследование в системе Mtlb задачи оценивания местоположения объекта по измерениям пеленгов. Результаты измерений показания приборов функционально связаны с параметрами вектором параметров: 3. где известные скалярные функции; ошибки измерений; входные переменные которые измеряются точно или отсутствуют.