• Когда выполняется цикл с предусловием while. Цикл с постусловием и цикл с предусловием

    В общих чертах, сегодня узнаем о каждом из циклов в паскале поподробней и увидим как они задаются. Будем разбирать цикл while с предусловием , цикл for с параметром и цикл repeat - until с постусловием .

    1. Цикл с параметром в Паскале - FOR

    Цикл FOR задаёт определённое условие по которому программа будет работать до его выполнения, допустим нужно нам 5 (или n) раз зациклить программу, то это легко сделать с помощью данного цикла. У цикла FOR есть характерная черта - счетчик который обычно обозначается буквой i или j.

    Внешний вид цикла с параметром в паскале:

    for i:= 1 to n do // присваиваем i сначала одному, потом двум, трем, ..., n

    После 1-го прохода переменной i присваиваем 1, после второго присваиваем 2 и так до тех пор, пока не дойдем до n. to - это до.. в порядке возрастания, также есть downto - до.. в порядке убывания.

    Блок - схема цикла с параметром:

    2. Цикл с предусловием в Паскале - WHILE

    Оператор цикла с предусловием выполняет действия заранее неизвестное число раз. Выход из цикла осуществляется, если некоторое логическое выражение или его результат окажется ложным. Так как верность логического выражения проверяется в начале, тело цикла может не выполнится ни одного разу.

    Структура цикла с предусловием:

    WHILE DO begin end;

    Логическое выражение, истинность которого проверяется вначале выполнения циклического оператора;

    Любые выполняемые операторы языка.

    Порядок выполнения цикла:

    Пока условие истинно выполняется тело цикла. Как только условие становится ложно выполнение цикла прекращается.

    Блок - схема цикла с предусловием:


    Примечание: в прямоугольных блоках показано любое действие, которое выполняется в цикле или после него (шаг цикла), в овалах - начало или конец всей программы или её части. Главную роль в данной блок - схеме играет её центральная часть.

    Пример:

    Задача: вычислить сумму ряда 1+1.5+2+2.5+3+3.5+ .. + 30

    program example-while;

    Var sum:real; n:real; BEGIN sum:=0; n:=1; while n

    3. Цикл с постусловием - Repeat - until.

    Этот оператор аналогичен оператору цикла с предусловием, но отличается от него тем, что проверка условия производится после выполнения тела (действий) цикла. Это обеспечивает его выполнение хотя бы один раз в отличие от ранее разобранных циклов.

    Обратите внимание на то, что данный оператор цикла предполагает наличие нескольких операторов в теле цикла, то есть можно выполнять несколько действий, поэтому служебные слова Begin и End не нужны.

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

    Блок - схема цикла с постусловием:

    Формат записи, структура цикла:
    REPEAT UNTIL ;

    Пример:

    Program test2; Var b:Real; Begin b:=100; Repeat b:=b/2; Until b

    Выводы:

    1.Цикл с параметром используется переменная, называемая параметром цикла или счётчиком. Перед выполнением цикла параметру (счётчику) устанавливается начальное значение. После выполнения шага цикла значение параметра увеличивается на единицу. Цикл продолжается до тех пор пока параметр не достигнет своего конечного значения, которое указывается после to (downto).

    2. Цикл с предусловием выполняется до тех пор, пока условие выполнения не станет ложным, и продолжается, если условие истинно.

    3. Цикл с постусловием выполняется до тех пор, пока условие не станет истинно, если условие ложно, цикл продолжается.

    Когда в алгоритме некоторое действие нужно выполнить несколько раз, используются циклы. В программирование цикл - это многократное повторение определенных инструкций. Циклы состоят из заголовка и тела. Заголовок содержит в себе условия, которые определяют работу цикла, а тело – повторяющиеся действия. В ЯП Pascal есть три вида циклов:

    цикл с параметром;

    цикл с предусловием;

    цикл с постусловием.

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

    For - цикл с параметром

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

    1. For <счетчик>:=< начальное значение> To <конечное значение> Do <тело цикла>;
    2. For <счетчик>:=<начальное значение> Downto <конечное значение> Do <тело цикла>;

    Счетчик – это переменная порядкового типа. Начальное и конечное значение должны быть того же типа, что и счетчик. Тело выполняется до тех пор пока условие истинно.

    Формы записи, представленные выше, отличаются словами To и Downto . Если Вы используете цикл с To, то значение счетчика с каждым шагом будет увеличиваться на единицу, а если с Downto, то уменьшаться. Из этого следует, что в первом варианте начальное значение не должно превышать конечное, во втором - верно противоположное. В программе ниже, указанное пользователем количество раз, будут выводиться символы.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    program for_primer;
    uses crt;
    var i, x: integer ;
    begin
    write (‘X=’ ) ;
    readln (x) ;
    for i:= 1 to x do
    write (#3 , #6 ) ;
    readkey;
    end .

    Здесь тело цикла не заключено в Begin-End, так как оператор всего один. Но если их будет больше, то операторные скобки обязательны. Стоит также отметить, что счетчик по выходу из цикла не будет иметь определенного значения, но если цикл закончиться раньше положенного, то счетчик сохранит последнее, записанное в него значение.

    While – цикл с предусловием

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

    While <выражение> Do <тело цикла>;

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

    Пример программы написанный с использованием цикла While:

    В данном коде использовался составной оператор Begin-End, так как операторов в теле цикла несколько.

    Repeat – цикл с постусловием

    Главной особенностью цикла с постусловием (часто встречается название: цикл-ДО) является выполнение его тела минимум один раз. Это связано с тем, что условие записывается в конце и соответственно вначале выполнится тело, а затем провериться условие. Формально он выглядит так:

    <тело цикла>

    Until <условие>

    В противоположность двум рассмотренным прежде циклам, этот прекращает свое выполнение тогда, когда условие становиться истинным, т. е. чтобы итерации продолжались условие должно быть ложно. Рассмотрим работу цикла с постусловием на примере:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    Оператор цикла while называется циклом с предусловием, поскольку условие выполнения цикла проверяется перед входом в него, он имеет следующий формат: while (выражение) тело цикла;

    В качестве выражения допускается использовать любое выражение языка Си, а в качестве тела любой оператор, в том числе пустой или составной. Схема выполнения оператора while следующая:

      Вычисляется выражение в скобках, затем проводится его проверка.

      Если выражение ложно, то выполнение оператора while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполняется блок операторов (тело цикла while ).

      Процесс повторяется с пункта 1.

    Блок-схема цикла с предусловием.

    Таким образом, блок операторов, следующий за while будет выполняться пока проверка условия дает результат отличный от нуля, true (истина). Разумеется, после выхода по условию выполнение программы продолжится с оператора, следующего за циклом.

    Рассмотрим следующий фрагмент программы:

    int x =0;

    while (x<10)

    { printf("%d\n",x);

    x++;

    printf(" The end ");

    Такой цикл выполнится 10 раз, напечатав значения х от 0 до 9 , и только после этого управление перейдет на второй, стоящий за циклом printf() .

    Цикл с постусловием (Оператор do … while)

    По поведению он очень похож на предыдущий цикл while() , за тем исключением, что условие проверяется после выполнения тела цикла. Если условие окажется ложным, цикл на этом заканчивается, в противном случае – выполняется очередная итерация цикла. Этот тип цикла используется в тех случаях, когда необходимо выполнить тело цикла хотя бы один раз. Формат оператора имеет следующий вид: do тело цикла while (выражение);

    Блок-схема цикла с постусловием.

    Чтобы прервать выполнение цикла до того, как условие станет ложным, можно использовать оператор break . Напечатаем значения х от 0 до 9 с использованием цикла do … while

    int x =0;

    { printf("%d\n", x);

    } while (x<10);

    printf("The end");

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

    int x=0;

    printf(" х =%d\n", x);

    } while (x !=0);

    Цикл со счетчиком (оператор for)

    Оператор for - это наиболее общий способ организации цикла. Он имеет следующий формат:

    for (выражение 1 ; выражение 2 ; выражение 3) тело цикла

    Выражение 1 обычно используется для установки начальных значений переменных, используемых в цикле («блок инициализации»). Выражение 2 определяет условие, при котором тело цикла будет выполняться. Выражение 3 определяет регулярные изменения переменных после каждого прохода тела цикла («блок модификации»).

    Блок-схема пошагового цикла.

    Схема выполнения оператора for :

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

      Вычисляется выражение 2 (перед каждым проходом цикла), если оно отлично от нуля –true (истина), то выполняется тело цикла, иначе (если выражение ложно) – цикл прекращается и управление передается оператору, следующему за оператором for .

      Вычисляется выражение 3 (модификация данных после каждой итерации цикла), переход к пункту 2.

    Существенно то, что проверка условия выполняется в начале цикла, а это значит, что тело цикла может ни разу не выполниться, если первый результат проверки будет false .

    Пример: Эта программа, как и две предыдущие напечатает цифры от 0 до 9

    for (x=0; x<10; x++)

    printf ("% d \ n ", x );

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

    Пример: Вот как будет выглядеть тот же алгоритм с отсутствующими частями инициализации и модификации в цикле for :

    for (; x<10 ;)

    {printf("%d\n",x);

    Как видите, x=0 теперь стоит перед циклом, а оператор x++ стал последним в теле цикла.

    Можно опустить и условие выхода, тогда программа будет считать, что условие всегда истинно и будет печатать строку "hello" до бесконечности.

    for (;;)

    printf (" hello \ n ");

    аналогичный бесконечный цикл while будет выглядеть так:

    while (1)

    printf("hello\n");

    while (1) – этокороткая запись оператора while (1!=0 ), то есть проверка условия 1!=0 всегда будет давать результатtrue

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

    Пример: Вычислять квадраты натуральных чисел от 0 до k , где k вводится с клавиатуры.

    #include

    using namespace std;

    void main()

    { int i=0,b,k;

    cout <<" k ="; // вывод текста "k=" на экран дисплея

    cin >> k ; // ввод данных с клавиатуры в переменнуюk

    cout << endl ; // перевод строки (вывод «конец строки» на экран)

    for (;;)

    { i=i+1;

    cout<

    if (i == k ) break ; // выход из цикла по условию

    Усложним условие задачи, пусть необходимо в начале цикла задать начальные значения не одной, а двум переменным (допустим x и y ), а в цикле изменить значения их обеих. Можно сделать эту работу следующим образом:

    int y, x=0;

    for (y=10; x

    Благодаря оператору « , » (запятая) можно поступить проще:

    int y, x;

    for (x=0, y=10; x

    { printf("x=%d\ty=%d\n", x, y);

    Программирование само по себе дело довольно сложное. Начать хотя бы с того, что все действия должны быть прописаны пошагово. Но вместе с такой необходимостью существует и ряд возможностей, что значительным образом облегчают достижение поставленной задачи, которую должно выполнить программирование ("Паскаль", "Си", "Ассемблер" - неважно какой язык используется). Одним из таких инструментов является создание циклов.

    Важность циклов в программировании

    Чем же является цикл? Зачем он необходим и какие преимущества получает программист при его использовании? Цикл является важной структурной составляющей программирования, которая позволяет автоматизировать выполнение определённого ряда действий, при условии что соблюдаются установленные параметры. Так, самый простой пример работы цикла - это поднесение определённого числа в степень. Нет нужды прописывать рядки до тех пор, пока не будет достаточно, ведь техника может всё сделать автоматически с его помощью. При практической реализации циклы также позволяют сэкономить много времени и труда, так как при использовании цикла нет необходимости каждый раз и на все действия прописывать программный код. Достаточно ввести заменяемые переменные и запустить реализацию. Но как построена схема цикла? Или даже нескольких? Самих вариантов реализации цикла довольно много - информации на целую книжку про программирование, "Паскаль" мы будем рассматривать или "Ассемблер". Поэтому в чисто ознакомительных целях предлагаем разобрать теоретическую схему работы двух самых популярных в использовании:

    1. Цикл с постусловием.
    2. Цикл с предусловием.

    Все остальные являются в значительной мере их вариациями и частными случаями, поэтому и рассматривать их необходимо в определённых контекстах и при достижении конкретных целей. А пока обратимся к самым популярным. Чем отличаются друг от друга циклы с предусловием и постусловием? Вот так выглядит цикл с предусловием:

    while «условие» do «программный код»

    Общетеоретическая база цикла с постусловием

    Это форма написания программного кода, когда оператор цикла с постусловием выполнения стоит после тела. С первого взгляда может показаться странным: действительно, зачем ставить обстоятельство выполнения после программного кода? Но ничего здесь странного нет: особенность такой формы в том, что код будет выполнен независимо от того, соблюдены условия выполнения или нет. Но только 1 раз. Затем будут следовать проверки, соответствует ли всё тому, как должно быть, или нет. И при отсутствии надлежащих условий тело цикла будет игнорироваться. Это очень важная и полезная особенность, которую имеет цикл с постусловием. На примере чего было это рассказано и где можно увидеть практическую реализацию расписанного здесь? Вот пример цикла с постусловием:

    «Программный код»

    until «Условие»

    Общетеоретическая база цикла с предусловием

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

    Практическая реализация в различных языках программирования

    Пару слов о практической эффективности циклов. Следует отметить в первую очередь экономию времени, причем как пользователя, так и программиста. О втором уже говорилось, почему так, поэтому следует пару слов сказать о клиенте. Дело в том, что разбивка на отдельные части позволяет программному обеспечению быстрее загружаться и работать, и, соответственно, сам пользователь будет только рад использовать такое ПО. Причем такой подход, когда код хранится в цикле или отдельном классе (которые зачастую вызываются именно из тела), и позволяет обеспечить эффективность работы. Кроме этого, следует занести быстроту записи в отдельные ячейки памяти. Так, если бы всё пришлось делать вручную, то нужно было бы обходить каждую и в ней же делать соответствующую запись. А цикл позволяет в разы или даже десятки сократить необходимость делать всё самому. И он убирает человеческий фактор, который может привести к необходимости часами искать проблемный код.

    Заключение

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

    Циклический вычислительный процесс (ЦВП) характеризуется повторением одних и тех же вычислений над некоторым набором данных. Числом повторений цикла управляет специальная переменная, называемая его счетчиком илиуправляющей переменной цикла. На счетчик накладывается условие, определяющее, до каких пор следует выполнять цикл.

    Повторяемый блок вычислений называют телом цикла. В теле цикла должно быть обеспеченоизменение значения счетчика , чтобы он мог завершиться. Если тело цикла состоит более, чем из одного оператора, онозаключается в операторные скобки begin ... end;. Однократное выполнение тела цикла называют егошагом .

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

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

    Цикл с постусловием : сначала выполняется тело цикла, затем управление передается на проверку условия. В зависимости от истинности или ложности условия, тело цикла выполняется повторно или же происходит переход к оператору, следующему за телом цикла. Всё, сказанное о возможном зацикливании для цикла с предусловием, справедливо и для цикла с постусловием.

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

    В языке Паскаль реализованы оба вида циклов. Цикл с предусловием имеет следующий общий вид:

    while логическое_выражение do begin

    {операторы тела цикла}

    Работу цикла можно описать словами: "пока логическое выражение истинно, повторяется тело цикла ".

    Логическое выражение строится по правилам, изученным в главе 7. Тело цикла могут образовывать любые операторы Паскаля. Если в теле цикла всего один оператор, операторные скобки можно и не писать.

    Общая запись цикла с постусловием следующая:

    {операторы тела цикла}

    until логическое_выражение;

    Работает цикл с постусловием следующим образом: "тело цикла повторяется до тех пор, пока логическое выражение не станет истинным ". Обратите внимание, что, в отличие отwhile, циклrepeatв Паскале работает, пока условиеложно . Это отличие подчеркивается использованием ключевого словаuntil("до тех пор, покане ") вместоwhile("до тех пор, пока"). Кроме того, в виде исключения, тело циклаrepeat, даже если оно состоит из нескольких операторов, можноне заключать в операторные скобки.

    Довольно часто циклы взаимозаменяемы. Представим, например, что для каждого из значений переменной x=1,2,…,20, нужно выполнить некоторый расчет (математически этот закон измененияxможно записать как
    или
    ). Покажем общий вид цикловwhileиrepeat:

    while x<=20 do begin

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

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

    Как видно из листинга, управляющей переменной xв обоих случаях присвоено начальное значение1, оба цикла изменяют значениеxи, соответственно, условие цикла, операторомx:=x+1;, но для циклаrepeatусловие "перевернуто" ("покаxне станет больше20"), а тело не заключено в операторные скобки.

    Зачастую использование одного из циклов выглядит предпочтительней. Например, обработка ввода пользователя с клавиатуры удобней с помощью repeat(сначала пользователь должен нажать клавишу, затем следуют проверки и обработка).