77980

Итерационные циклы

Лекция

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

Для организации итерационных циклов используются операторы цикла с предусловием цикл ПОКА и цикла с постусловием цикл ДО. Эти операторы не задают закон изменения параметра цикла поэтому необходимо перед циклом задавать начальное значение параметра с помощью оператора присваивания а внутри цикла изменять текущее значение этого параметра. Циклы с предусловием используются тогда когда выполнение цикла связано с некоторым логическим условием. Оператор цикла с предусловием имеет две части: условие выполнения цикла и тело цикла.

Русский

2015-02-05

47 KB

1 чел.

Итерационные циклы – это цикл, в которых число повторении циклов заранее не известно и зависит от некоторых условий. По сравнению с циклом с параметром, рассмотренным нами выше, итерационные циклы являются универсальными. Для организации итерационных циклов используются операторы цикла с предусловием — цикл «ПОКА» и цикла с постусловием цикл «ДО».

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

Цикл с предусловием (цикл «Пока…»).

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

При выполнении оператора while определенная группа операторов выполняется до тех пор, пока определенное в операторе while булево условие истинно. Если условие сразу ложно, то оператор не выполнится ни разу.

Общая форма записи следующая

while <булево выражение> do

 begin

   группа операторов

 end;

На русском языке это звучит примерно так:

пока выполняется это условие, делай

  от начала

    группа операторов

  до конца;

Вполне понятно, что операторные скобки ставят, чтобы отделить от остальной программы ту группу операторов, которую нужно повторить в цикле. Если в цикле нужно выполнить только один оператор, то операторные скобки не ставят.

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

  1.  значение условия выполнения цикла должно быть определено до начала цикла;
  2.  если значение условия истинно, то выполняется тело цикла, после чего повторяется проверка условия. Если условие ложно, то происходит выход из цикла;
  3.  хотя бы один из операторов, входящих в тело цикла, должен влиять на значение условия выполнения цикла, иначе цикл будет повторяться бесконечное число раз.

Вернемся к нашей задаче вычисления суммы чисел. При вычислении суммы используем следующий прием: вначале, когда еще не задано ни одно слагаемое, сумму полагают равной нулю (S:=0), а затем, получая очередное слагаемое, прибавляют его к сумме (S:=S+x) (см. программу ниже).

Очень важную роль в операторе цикла играет так называемая переменная цикла. В нашей программе она называется i. С ее помощью мы обращаемся к пользователю за очередным числом (write (‘Введите ‘,i,’-ое число ’)) и считаем количество уже введенных чисел (i:=i+1), чтобы не запросить лишнее. Одновременно переменная цикла участвует в булевом выражении (i<=N).

Рассмотрите внимательно программу, решающую нашу задачу.

Program Summa;

Uses

 Crt;

Var

 i,

 N : integer;

 x, S : real;

Begin

 ClrScr;

 write ('Сколько чисел для сложения? ');

 readln (N);

 S:=0;

 i:=1;

 while i<=N do

   begin

     write ('Введите ',i,'-е число ');

     readln (x);

     S:=S+x;

     i:=i+1;

   end;

 write ('Сумма введенных чисел равна ',s:5:2);

 readln;

End.

Хотелось бы, чтобы Вы смогли представить работу этой программы. Давайте попробуем вместе.

Пусть нам требуется сложить следующие числа: 5, 7, -4, 0, 8, 20. Посчитаем, сколько их всего – шесть. Это число мы введем, когда программа задаст вопрос: Сколько чисел для сложения? Теперь наша программа запросит ввести 1-ое число, т. к. на первом шаге переменная i равна 1. Мы введем число 5. Программа считает его в переменную х. Теперь число 5 сложим с числом 0 и результат присвоим переменной S (оператор S:=S+x). В этот момент S становится равной 5. Чтобы перейти к следующему числу, увеличим значение переменной i на 1 (оператор i:=i+1). Выполнение операторов тела цикла закончено. Теперь программа переходит опять к анализу условия вхождения в цикл (i<=N). Переменная цикла i=2, переменная N=6, поэтому значение логического условия 2<=6 равно True. Значит снова выполняется тело цикла:

while i<=N do {2<=6}

 begin

   write ('Введите ',i,'-ое число '); {Введите 2-е число}

   readln (x); {Считали число 7}

   S:=S+x; {S:=5+7}

   i:=i+1; {i:=2+1}

 end;

Итак, мы сложили два числа и переходим опять к проверке условия. Ответим на вопрос: 3<=6? Да. Поэтому снова начинают работать операторы тела цикла, и мы переходим к третьему числу:

while i<=N do {3<=6}

 begin

   write ('Введите ',i,'-ое число '); {Введите 3-е число}

   readln (x); {Считали число -4}

   S:=S+x; {S:=12 + (-4)}

   i:=i+1; {i:=3+1}

 end;

Аналогично, мы сложим и остальные числа. Но когда же операторы цикла выполнятся последний раз и остановится работа цикла? Когда сложим последнее число. Проверим это.

while i<=N do {6<=6}

 begin

   write ('Введите ',i,'-ое число '); {Введите 6-е число}

   readln (x); {Считали число 20}

   S:=S+x; {S:=16+20}

   i:=i+1; {i:=6+1}

 end;

Проверяется опять условие 7<=6. Значение этого условия равно False, а значит, тело цикла выполняться не будет. Цикл закончил свою работу. А мы получили результат: посчитали сумму всех шести чисел S=32.

В этом примере известно заранее количество повторений - N раз. Но чаще всего этот вид цикла используется тогда, когда количество повторений заранее не известно и зависит от выполнения какого-либо условия.

Цикл с постусловие (цикл «…До»)ю

Вы уже умеете организовать цикл при помощи оператора while. Напомним, что при выполнении этого оператора компьютер проверяет значение условия. Если условие истинно, то исполнительная часть оператора while будет повторяться до тех пор, пока это условие не примет значение False. Если значение условия есть False в самом начале, то тело цикла while вообще не будет выполняться.

Иногда при решении задач возникает необходимость выполнить тело цикла хотя бы один раз, а потом, проверив условие, определить, повторять ли тело цикла еще раз. Эту задачу выполнит другой вид цикла – цикл Repeat.

repeat {повторяй}

  {операторы операторы}

until <условие>; {до тех пор, пока условие не будет истинным}

Есть небольшое отличие в организации цикла repeat по сравнению с while: для выполнения в цикле repeat нескольких операторов не следует помещать эти операторы в операторные скобки begin ... end. Зарезервированные слова repeat и until действуют как операторные скобки.

Конструкция repeat ... until работает аналогично циклу while. Различие заключается в том, что цикл while проверяет условие до выполнения действий, в то время как repeat проверяет условие после выполнения действий. Это гарантирует хотя бы одно выполнение действий до завершения цикла.

Например,

a) repeat

read(Number);

Sum:=Sum+Number;

Until

Number=-1

b) repeat

     i := i+1;

     writeln (Sqr(i));

   until i>=10

Задача. Определить, является ли введенное число простым.

Алгоритм решения этой задачи будет следующий. При помощи операции mod проводим проверку всех целых чисел от 2 до введенного числа Number. Мы проверяем, является ли очередное проверяемое число делителем нашего числа (значит, остаток от деления введенного числа на проверяемое число равен нулю). Если такой делитель найден, значит, цикл досрочно завершает свою работу на некотором i-том шаге. Если делитель не найден, значит, цикл проверил все числа, и значение переменной цикла i будет равно конечному значению, т.е. Number. Поэтому, после записи цикла следует анализ значения переменной i и выводится соответствующее сообщение.

Примечание. Напомним, что простым называется число, которое не имеет делителей кроме 1 и самого себя.

Цикл не может продолжаться бесконечно, так как любое число всегда делится само на себя.

Program Prostoe;

Uses

 Crt;

Var

 i, {возможный делитель}

 Number : integer; {исследуемое число}

Begin

 ClrScr;

 writeln ('Какое число должно быть проверено? ');

 read (Number);

 i := 1;

 repeat

   i := i+1;

 until Number mod i = 0;

 if Number=i

   then

     writeln (Number,' является простым')

   else

     writeln (Number,' делится на ',i);

 readln;

End.

При построении циклов нужно быть очень аккуратным: следить за отсутствием ошибок как в фазе входа в цикл, так и в фазе завершения цикла.


 

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

81706. Проблема людини в філософії: екзистенційна та субстанійна концепції 28.3 KB
  Вона є теоретичним усвідомленням драматизму першої половини XX століття трагізму людини котра потрапила на межу життя і смерті буття і небуття в результаті реальної загрози її існуванню як людини як виду. Моделлю людини як такого для екзистенціалістів стала страждаюча зневірена людина яка знаходиться в прикордонній ситуації ситуації на межі життя та смерті. Ірраціональність буття абсурдність самого існування людини сумніви у можливості раціонального пізнання світу це все складові філософії екзистенціалізму.
81707. Проблема походження людини та суспільства 26.28 KB
  Релігійна гіпотеза походження людини базується на біблійних переказах про створення Богом світу і людини гріхопадіння Адама і Єви Всесвітній потоп про те що заповідав Бог людям та регламентацію життєдіяльності людини яка викладена в заповідях. Космічна гіпотеза походження людини базується на припущенні що життя принесено на Землю з Космосу у тому числі в його цивілізованих проявах. Еволюційна гіпотеза походження життя...
81708. Поэма Н. В. Гоголя «Мертвые души» как «малый род эпопеи». Гоголь о замысле поэмы 46.75 KB
  Гоголь о замысле поэмы. Гоголь задумал монументальное произведение в трех томах великую национальную поэму стремясь показать не только современную Россию Русь с одного боку но пытался заглянуть в ее завтрашний день раскрыть положительные начала русской жизни указать родине путь к спасению. Гоголь стал изображать людей обыкновенных а не приятные только исключения из общих правил . Гоголь раскрывает ту социальную основу которая сформировала характеры героев поэмы: дворянский паразитизм расцветший на почве...
81709. Двенадцать А. А. Блока – поэма о революции. Чтение наизусть и разбор отрывка из поэмы 31.47 KB
  Но вместе с тем блоковское понимание революции было ограниченным: поэт слышал в ней по преимуществу одну музыку музыку разрушения старого мира и именно ее громовое звучание он передал в Двенадцати Разумное же организующее созидательное начало пролетарской революции оставалось Блоку как и прежде; в значительной мере неясным. Восприятие Октябрьской революции как мирового пожара явственно сказалось в Двенадцати определив как сильные так и слабые стороны поэмы. Прогнивший старый мир с буржуями барынями попами и витиями осужден...
81710. Испытание любовью как средство характеристики героя в произведениях отечественной классики 19 веке 33.02 KB
  Способность человека любить – это для Т. критерий его состоятельности, и своих героев писатель непременно проводит через это испытание. Любовь в мироощущении Т. всегда отмечена знаком трагедии. Он говорит о чувстве либо отвергнутом, либо неосуществленном, либо оборванном на первой высокой ноте. Любовь трагична, ибо она по сути своей есть стремление к идеалу, идеал же недостижим.
81711. Футуризм как литературное направление. Анализ одного стихотворения поэта-футуриста 38.85 KB
  В творчестве Хлебникова Бурлюка зазвучали отголоски славянофильства свойственного русскому декадентству начала века. Хлебникова посвоему раннего Маяковского. Хлебникова В. Основные положения футуристической программы выразились в творчестве Велимира Хлебникова Виктора Владимировича Хлебникова 1885 1922 ведущего участника группы кубофутуристов или будетлян как назвал их поэт.
81712. Мысль семейная в произведениях отечественной классики 19 веке 32.23 KB
  Писатель считает что основой формирования личности является семья. Семья в понимании Т. Идеалом семейного бытия является семья Ростовых. и княжны Марьи состоявшееся Семья Н.
81713. Фантастические мотивы и образы в произведениях отечественной литературы 46.25 KB
  Петербургские повести с включением Коляски и отрывка Рим были объединены Гоголем в III томе Собрания его сочинений в 1842 г. Три повести Арабесок рассредоточены по всему сборнику чередуясь с историческими и эстетическими этюдами. Портрет является опытом создания романтической фантастической повести на современном материале. В повести она воплощается в образе ростовщика Петромихали его денег его страшного портрета.
81714. Тема России в поэзии А. Блока. Чтение наизусть и разбор одного стихотворения 32.56 KB
  В основе символизма лежит философия Владимира Соловьева, именем которого было ознаменовано для Блока - и не для него одного – начало 90 – х г. г. 19 в., то есть период « Прекрасной Дамы». Учение, теократию В. Соловьева можно довольно точно определить как воплощение духовного в жизненном. Вечная Женственность