Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций.docx
Скачиваний:
11
Добавлен:
01.07.2025
Размер:
425 Кб
Скачать
☆

8.2. Структуры повторения (Циклы).

Для повторения вычислений в программе применяются структуры повторения , чаще их называют циклами. Различаются следующие типы циклов: циклы с условием (цикл ПОКА и цикл ДО ), цикл со счетчиком.

Истино

Ложно

Ложно

Истино

Рис 5.4 Структуры повторения

argum = Val (txtOrd.Text) argum = Val (txtOrd.Text)

limit = Val ( txt Gran.Text) limit = Val ( txt Gran.Text)

Do While argum> limit Do Untile argum> limit

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

argum = argum - const argum = argum + const

Loop Loop

В приведенной записи цикл ПОКА и ДО может быть не выполнен ни разу, так как условие проверяется перед вхождением в цикл. Для того, чтобы цикл выполнился хотя бы раз в VB предусмотрена конструкция в которой условия While и Until размещаются в операторе Loop

argum = Val (txtOrd.Text) argum = Val (txtOrd.Text)

limit = Val ( txt Gran.Text) limit = Val ( txt Gran.Text)

Do While argum> limit Do Untile argum> limit

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

argum = argum - const argum = argum + const

Loop While argum> limit Loop Untile argum> limit

Для досрочного выхода из цикла используется оператор Exit Do

Так как циклы Пока и До очень похожи , какой из них лучше использовать, или где необходимо поместить услови? Для многих случаев можно использовать любой цикл. Фактически при соответствующем условии вы можете выполнять одни и те же функции любым циклом.

Рассмотрим программу

Цикл Пока Цикл ДО

Ichk = 0 Ichk = 0

Do While Ichk <= 10 Do Untill Ichk > 10

Ichk = Ichk +1 Ichk = Ichk +1

A = Ichk A = Ichk

Loop Loop

В первом цикле условие оценивается сначала как True (0<10), следовательно цикл выполняется. Это продолжается до тех пор пока Ichk не станет равным False (11не меньще или равно 10) и цикл завершается.

Во втором цикле условие ( является = Ichk?) сначало равно False и цикл выполняется. Когда значение Ichk становится равным 11, условие становится равным True и цикл завершается.

В обеих циклах операторы внутри цикла выполняются 11 раз. Если тем не менее вы используете в условии функцию или переменную, которая дает значение True или False, Вы должны использовать цикл Do While, если вы выполняете цикл при значении True. И вы должны использовать цикл Do Untill, если цикл выполняется при значении False.

Определить где размещать условие проще. Если вам всегда требуется выполнить цикл, по крайней мер, один раз, поместите условие в операторе Loop (Loop While либо LoopUntill)

Условия окончания цикла.

Правильное размещение опратора изменяющего условие.

Неизменность инварианта цикла.

Достижимость параметром цикла условия завершения цикла.

Следует проверять и доказывать методом индукции.

Цикл со счетчиком записывается в следующем виде

For varname = start to end step stepsize

Операторы цикла

Next [varname]

Для досрочнрго выхода из цикла используется оператор Exit For

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

Структурное программирование иногда называют еще «программированием без GO TO». Однако дело здесь не в операторе GO TO, а в его беспорядочном использовании. Очень часто при воплощении структурного программирования на некоторых языках программирования (например, на ФОРТРАНе) оператор перехода (GO TO) используется для реализации структурных конструкций, не снижая основных достоинств структурного программирования. Запутывают программу как раз «неструктурные» операторы перехода, особенно переход на оператор, расположенный в тексте модуля выше (раньше) выполняемого оператора перехода. Тем не менее, попытка избежать оператора перехода в некоторых простых случаях может привести к слишком громоздким структурированным программам, что не улучшает их ясность и содержит опасность появления в тексте модуля дополнительных ошибок. Поэтому можно рекомендовать избегать употребления оператора перехода всюду, где это возможно, но не ценой ясности программы].

К полезным случаям использования оператора перехода можно отнести выход из цикла или процедуры по особому условию, «досрочно» прекращающего работу данного цикла или данной процедуры, т.е. завершающего работу некоторой структурной единицы (обобщенного оператора) и тем самым лишь локально нарушающего структурированность программы. Большие трудности (и усложнение структуры) вызывает структурная реализация реакции на возникающие исключительные (часто ошибочные) ситуации, так как при этом требуется не только осуществить досрочный выход из структурной единицы, но и произвести необходимую обработку (исключение) этой ситуации (например, выдачу подходящей диагностической информации). Обработчик исключительной ситуации может находиться на любом уровне структуры программы, а обращение к нему может производиться с разных нижних уровней. Вполне приемлемой с технологической точки зрения является следующая «неструктурная» реализация реакции на исключительные ситуации]. Обработчики исключительных ситуаций помещаются в конце той или иной структурной единицы и каждый такой обработчик программируется таким образом, что после окончания своей работы производит выход из той структурной единицы, в конце которой он помещен. Обращение к такому обработчику производится оператором перехода из данной структурной единицы (включая любую вложенную в нее структурную единицу).