Цикл while pascal abc

Цикл while pascal abc

При решении задач может возникнуть необходимость повторить одни и те же действия несколько или множество раз. В программировании блоки кода, которые требуется повторять не единожды, оборачиваются в специальные конструкции – циклы. У циклов выделяют заголовок и тело. Заголовок определяет, до каких пор или сколько раз тело цикла будет выполняться. Тело содержит выражения, которые выполняются, если в заголовке цикла выражение вернуло логическую истину (True, не ноль). После того как достигнута последняя инструкция тела, поток выполнения снова возвращается к заголовку цикла. Снова проверяется условие выполнения цикла. В зависимости от результата тело цикла либо повторяется, либо поток выполнения переходит к следующему выражению после всего цикла.

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

Цикл for

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

В заголовке цикла указываются два значения. Первое значение присваивается так называемой переменной-счетчику, от этого значения начинается отсчет количества итераций (повторений). Отсчет идет всегда с шагом равным единице. Второе значение указывает, при каком значении счетчика цикл должен остановиться. Другими словами, количество итераций цикла определяется разностью между вторым и первым значением плюс единица. В Pascal тело цикла не должно содержать выражений, изменяющих счетчик.

Цикл for существует в двух формах:

Счетчик – это переменная любого из перечисляемых типов (целого, булевого, символьного, диапазонного, перечисления). Начальные и конечные значения могут быть представлены не только значениями, но и выражениями, возвращающими совместимые с типом счетчика типы данных. Если между начальным и конечным выражением указано служебное слово to, то на каждом шаге цикла значение параметра будет увеличиваться на единицу. Если же указано downto, то значение параметра будет уменьшаться на единицу.

Количество итераций цикла for известно именно до его выполнения, но не до выполнения всей программы. Так в примере ниже, количество выполнений цикла определяется пользователем. Значение присваивается переменной, а затем используется в заголовке цикла. Но когда оно используется, циклу уже точно известно, сколько раз надо выполниться.

Цикл while

Цикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true, то тело цикла выполняется, если false – то нет.

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

Цикл repeat

Цикл while может не выполниться ни разу, если логическое выражение в заголовке сразу вернуло false. Однако такая ситуация не всегда может быть приемлемой. Бывает, что тело цикла должно выполниться хотя бы один раз, не зависимо оттого, что вернет логическое выражение. В таком случае используется цикл repeat – цикл с постусловием.

Читайте также:  Беспроводная клавиатура для офиса

В цикле repeat логическое выражение стоит после тела цикла. Причем, в отличие от цикла while, здесь всё наоборот: в случае true происходит выход из цикла, в случае false – его повторение.

В примере, даже если n будет равно 0, одна звездочка все равно будет напечатана.

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

Цикл — одна из форм управляющих конструкций в языках программирования. Используется для многократного выполнения набора команд.

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

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

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

Цикл while pascal

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

  • с использованием операторных скобок (begin end), выполнение двух и более команд;
  • запись с одной командой.

Задание 1. Даны два положительных числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без
наложений). Не используя операции умножения и деления, найдите длину незанятой части отрезка A.

Решение:
Вариант 1

Primary tabs

Forums:

Ранее мы уже рассмотрели цикл for (т.н. "цикл с известным числом повторений"), для которого число витков определялось правой и левой границей счетчика.

Далее мы рассмотрим цикл while, число повторов которого определяется иначе, а именно на основании проверки истинности логического выражения.

Когда используется

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

Цикл while — структура

— операторные скобки для тела цикла обязательны, если в нём более одного действия.

В качестве условия можно использовать более сложное выражение, лишь бы возвращаемый результат имело логический тип:

Условие выхода из while

Цикл типа while в Паскале выполняется до тех пока истинно логическое выражение в заголовке данного цикла.
То есть:

  1. Если логическое выражение истинно — то делается следующий виток цикла.
  2. Если логическое выражение ложно — то цикл завершается, и программа выполняется далее (по инструкциям, которые записаны в коде ниже тела цикла).

Бесконечный циклы и как с ними бороться

Как возникают бесконечные циклы

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

Читайте также:  Как переносить файлы с компьютера на андроид

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

  1. Цикл while выполнился хотя бы один первый раз.
  2. Во всех последующих итерациях (повторах) тела цикла логическое выражение по-прежнему возвращает только true и никогда false.

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

В этой программе используется цикл, решение об очередном выполнении которого принимается на основании проверки условия:

Но фактически, мы видим, что ещё до начала цикла была выполнена операция присваивания:

— а это значит, что на самом деле в цикле первый раз мы проводим сравнение (паскаль проводит):

результат которого истинен, а цикл первый раз выполнится (первое условие для "угрозы бесконечности" у нас уже есть). Что же происходит далее?
В теле цикла значение переменной $a$ никак не меняется, а значит не меняется от витка к витку и значение логического выражения:

— и потому цикл оказывается бесконечным.

Как избежать этой ситуации? Рассмотрим далее.

Как бороться с бесконечными циклами

Чтобы цикл с проверкой логического условие не был бесконечным необходимо:

  • изменять в теле цикла компоненты логического выражения (значения входящих в него переменных)

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

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

Главное: анализируйте ваш код на предмет того, что в каком-то витке условие должно вернуть false — без этого любой while, который начал выполняться станет бесконечным.

Примеры кода (решения задач)

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

Пример №1 — цикл с неизвестным число повторений

Пользователь вводит целые числа. Пока он не введёт число большее $17$, в ответ на каждое введённое число выводите сумму этого числа и числа $8$, если же введённое число больше $17$, то цикл необходимо завершить.

Решим эту задачу:

Пример №2 — замена for на while

Цикл while — самая универсальная конструкция из всех циклов Паскаля. любой другой цикл можно заменить на него (хотя это не всегда рекомендуется делать). Рассмотрим код (запустите его):

Читайте также:  Фоллаут 4 бесконечное строительство

— в этой задаче мы выводим числа от $1$ до $10$ два раза, делая одно и тоже разными циклами.
По сути в while в примере выше мы тоже используем переменную счетчик, но уже сами управляем её изменением в теле цикла, в то время как в for этого не требуется.

Для циклов с известным числом повторений рекомендуется использовать именно for, так как по его заголовку сразу видно, сколько раз выполнится тело (по крайней мере, это видно намного лучше чем, скажем, в цикле while).

Задачи для самостоятельного решения

  1. Пользователь вводит целые числа. Пока он не введёт число большее $15$, в ответ на каждое введённое число выводите сумму этого числа и числа $7$, если же введённое число больше $15$, то цикл необходимо завершить.
  2. Пользователь вводит целые числа. Пока он не введёт число большее $15$, в ответ на каждое введённое число выводите сумму этого числа и предыдущего введённого им числа, если же введённое число больше $15$, то цикл необходимо завершить.

Первое введенное пользователем число можно сложить с единицей.

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

Ниже мы приведём ещё пару задач на эту же тему.

  • Решите с помощью цикла while:
    Выведите на экран, все нечетные числа, делящиеся на 3 нацело, лежащие в диапазоне от 35 до 117.
  • Решите с помощью цикла while:
    Выведите на экран, все четные числа от 35 до 117 и нечетные числа, лежащие в диапазоне от 45 до 99.
    Указание: сначала можно решить задачу двумя циклами, но потом перепишите с использованием одного цикла, в теле которого составьте логическое выражение, описывающее подходящие числа (используйте логические операции).
  • Модификация одной из пред. задач: Пользователь вводит целые числа. Пока он не введёт число большее $15$, в ответ на каждое введённое число выводите сумму этого числа и двух предыдущих введённых им чисел (предыдущего и пред-предыдущего), если же введённое число больше $15$, то цикл необходимо завершить.
  • В первом витке цикла все "предыдущие" числа можно считать единицами.

    Модификация одной из пред. задач: Пользователь вводит целые числа. Пока он не введёт число большее $15$, в ответ на каждое введённое число выводите сумму этого числа и пред-предыдущего введённого им числа, если это число чётное, иначе просто запрашивать новое число. Если же введённое число больше $15$, то цикл необходимо завершить.

    В первом витке цикла все "предыдущие" числа можно считать единицами.

  • Пользователь вводит целые числа, в ответ выводите символ #. Если введенное пользователем число равно 22, то завершите цикл не выводя ничего в ответ. Решите эту задачу 2-мя способами:
    • С использованием if()
    • С использованием break;
    • Ссылка на основную публикацию
      Хороший принтер для школьника
      Для ученика возможность распечатывать доклады, рефераты и иллюстрации для занятий в школе - совсем не лишняя. Школьнику в XXI веке...
      Файл с расширением dav чем открыть
      Файл формата DAV открывается специальными программами. Чтобы открыть данный формат, скачайте одну из предложенных программ. Чем открыть файл в формате...
      Файл подкачки windows 7 на флешку
      В прошлой статье рассказано, как определиться с оптимальным размером файла подкачки, что делать с SSD-дисками и как установить размер файла...
      Хороший телефон с aliexpress
      Обновлено 22.10.2019 На Алиэкспресс есть много разных производителей смартфонов. Даже есть такие международные бренды, как Apple. В этой подборке мы...
      Adblock detector