Как выглядит конструкция цикла пока
Внешний вид цикла с параметром в паскале:
Оператор цикла с предусловием выполняет действия заранее неизвестное число раз. Выход из цикла осуществляется, если некоторое логическое выражение или его результат окажется ложным. Так как верность логического выражения проверяется в начале, тело цикла может не выполнится ни одного разу.
Структура цикла с предусловием:
— логическое выражение, истинность которого проверяется вначале выполнения циклического оператора;
— любые выполняемые операторы языка.
Порядок выполнения цикла:
Пока условие истинно выполняется тело цикла. Как только условие становится ложно выполнение цикла прекращается.
Этот оператор аналогичен оператору цикла с предусловием, но отличается от него тем, что проверка условия производится после выполнения тела (действий) цикла. Это обеспечивает его выполнение хотя бы один раз в отличие от ранее разобранных циклов.
Обратите внимание на то, что данный оператор цикла предполагает наличие нескольких операторов в теле цикла, то есть можно выполнять несколько действий, поэтому служебные слова Begin и End не нужны.
Формат записи, структура цикла:
Выводы:
1.Цикл с параметром используется переменная, называемая параметром цикла или счётчиком. Перед выполнением цикла параметру (счётчику) устанавливается начальное значение. После выполнения шага цикла значение параметра увеличивается на единицу. Цикл продолжается до тех пор пока параметр не достигнет своего конечного значения, которое указывается после to (downto).
2. Цикл с предусловием выполняется до тех пор, пока условие выполнения не станет ложным, и продолжается, если условие истинно.
3. Цикл с постусловием выполняется до тех пор, пока условие не станет истинно, если условие ложно, цикл продолжается.
Урок 31
Исполнитель Робот
Цикл «пока»
Работа в среде «Алгоритмика»
Цикл «пока»А теперь попробуем написать программу для решения очень простой задачи: закрасить все клетки справа от Робота (рис. 3.13). Правда, сколько именно клеток следует закрасить, не уточнено. Известно только, что: Воспользуемся тем, что Робот может анализировать и сообщать обстановку вокруг себя, проверяя следующие простые условия: Ясно, что пока будет выполняться условие справа свободно, нужно выполнять команды: Для оформления таких последовательностей действий используется специальная конструкция алгоритмического языка — цикл «пока». В общем виде цикл «пока» записывается так: Блок-схема цикла «пока» имеет вид, показанный на рис. 3.14. При выполнении этого цикла исполнитель повторяет следующие действия: Напишем программу, исполняя которую Робот нарисует на клетчатом поле меандр (рис. 3.12), число витков которого зависит от положения правой стены. Виток меандра умещается на клетчатом поле, если между клеткой, занимаемой Роботом, и правой стеной есть 1 клетка. В зависимости от исходного положения Робота тело цикла пока может не выполниться ни разу. Такая ситуация не является отказом. ♦ Подумайте, каким должно быть исходное положение Робота в программе рисования меандра, чтобы тело цикла не выполнилось ни разу. Из-за логических ошибок, допущенных при составлении алгоритма, может возникнуть ситуация зацикливания. Это значит, что условие будет всегда соблюдаться, и выполнение цикла «пока» никогда не завершится. Рассмотрим следующий пример: ♦ Что будет происходить, если справа от Робота нет стены? Условие в цикле «пока» проверяется только перед выполнением тела цикла, но не в процессе его выполнения. ♦ Подумайте, что произойдет, если Робот начнет выполнять нашу программу рисования меандра с циклом «пока», находясь в следующем исходном положении: ♦ Что общего у циклов «повторить п раз» и «пока»? Какие между ними отличия? Нужны ли две конструкции для описания повторяющихся действий? Простые и составные условияВ цикле «пока» могут использоваться не только простые, но и составные условия. Составное условие образуется из одного или несколь¬ких простых условий и служебных слов И, ИЛИ, НЕ. Рассмотрим составное условие А И В, где А, В — простые условия. Условие А И В выполнено, когда выполнено каждое из двух входящих в него простых условий. Пусть А — простое условие сверху свободно, В — простое условие справа свободно. Рассмотрим подробно проверку составного условия А ИВ — сверху свободно и справа свободно В случае а выполнено условие А (сверху свободно), выполнено условие В (справа свободно). Составное условие А И В(сверху свободно И справа свободно)также выполнено. В случае б выполнено условие А, условие В не выполнено. Составное условие А И В не выполнено. В случае в не выполнено условие А, условие В выполнено. Составное условие А И В не выполнено. В случае г не выполнено условие А, не выполнено условие В. Составное условие А И В не выполнено. ♦ Нужно ли проверять условие В в составном условии АИВ, если условие А не выполнено? Составное условие А ИЛИ В выполнено, когда выполнено хотя бы одно из двух входящих в него простых условий. Рассмотрим проверку составного условия А ИЛИ В — сверху свободно ИЛИ справа свободно (см. рис. 3.15). В случае а выполнено условие А (сверху свободно), выполнено условие В (справа свободно). Составное условие А ИЛИ В (сверху свободно ИЛИ справа свободно) выполнено. В случае б выполнено условие А, не выполнено условие В. Составное условие А ИЛИ В выполнено. В случае в не выполнено условие А, выполнено условие В. Составное условие А ИЛИ В выполнено. В случае г не выполнено условие А, не выполнено условие В. Составное условие А ИЛИ В не выполнено. ♦ Нужно ли проверять условие В в составном условии А ИЛИ В, если условие А выполнено? Составное условие НЕ А выполнено, когда не выполнено условие А. Пусть А — простое условие закрашено. Рассмотрим проверку составного условия НЕ А (рис. 3.16). В случае а условие А выполнено, условие НЕ А (НЕ закрашено) не выполнено. В случае б условие А не выполнено, условие НЕ А (НЕ закрашено) выполнено. Рассмотрим пример использования составного условия. Известно, что Робот находится где-то в вертикальном коридоре. Ни одна из клеток коридора не закрашена. Составим алгоритм, под управлением которого Робот закрасит все клетки этого коридора и вернется в исходное положение. Так как Роботу предстоит закрасить только клетки коридора, мы должны «научить» его их распознавать. Чем же клетки коридора отличаются от всех прочих клеток поля? Из рис. 3.17 видно, что каждая клетка коридора слева и справа ограничена стеной. Робот находится в коридоре, пока слева стена и справа стена. В СКИ нашего исполнителя такие условия не предусмотрены. Там есть противоположные условия: слева свободно, справа свободно. Используем служебное слово НЕ: Представим план действий Робота укрупненными шагами (рис. 3.18): Для простоты предположим, что над коридором и под коридором есть хотя бы по одной клетке без стен (иначе придется делать дополнительные проверки сверху свободно, снизу свободно). 1. Чтобы закрасить все клетки коридора, находящиеся выше Робота, прикажем Роботу шагнуть вверх и выполним цикл «пока»: Под управлением этого алгоритма Робот закрасит все клетки коридора, находящиеся выше от него, и окажется на клетке рядом с верхней границей коридора. ♦ При каком исходном положении Робота этот цикл не выполнится ни разу? 2. Командой вниз вернем Робота в коридор. Наша задача — вернуть его в исходную точку. Эта точка имеет единственный отличительный признак — она не закрашена. Поэтому пока занимаемая Роботом клетка оказывается закрашенной, будем перемещать его вниз: Под управлением этого алгоритма Робот окажется в исходной клетке. 3. Выполнив команду вниз, Робот пройдет исходную клетку и займет первую клетку, расположенную ниже исходной. Теперь можно закрашивать клетки коридора, расположенные ниже исходной: ♦ Возможна ли ситуация, что этот цикл не выполнится ни разу? 4. Так как, выполнив предыдущий алгоритм, Робот окажется под коридором, командой вверх вернем его в коридор. Возвращение в исходную точку обеспечивается алгоритмом: 5. По команде закрась Робот закрашивает исходную точку. Полностью программа управления Роботом выглядит так: Изучаем C++. Часть 6. Циклы while, do-while и forРазбираемся, как сократить повторяющийся код в C++ и сэкономить время. Это шестая часть из серии статей «Глубокое погружение в C++». В прошлый раз мы узнали, как использовать функции и процедуры. Сейчас поговорим о циклах while, do-while и for. Циклы — это разновидность условных конструкций. Они позволяют выполнять команды несколько раз, если определённое утверждение верно. Например, с помощью циклов можно пять раз вывести на экран какую-нибудь надпись или посчитать сумму всех чисел. Пишет о программировании, в свободное время создает игры. Мечтает открыть свою студию и выпускать ламповые RPG. Цикл while в C++Запись цикла while выглядит так: Этот код выполняется следующим образом: То есть пока утверждение верно (i Посмотрим на вывод: Обратите внимание на переменную i — она играет роль счётчика, к которому в каждом шаге цикла прибавляется единица. Это нужно, чтобы инструкции выполнялись только определённое количество раз. Один шаг цикла называется итерацией, а счётчик — итератором. Поэтому чаще всего для счётчика создаётся переменная i. Важно! Следите за тем, чтобы выход из цикла был возможен, иначе он будет выполняться бесконечно. Если внутри цикла складываются числа или что-то выводится, то нагрузка будет минимальной. Если же это какие-то ресурсозатратные вычисления, то выполнение такого цикла может заставить компьютер зависнуть. Когда нам нужно вмешаться в работу цикла, мы используем операторы break и continue. Оператор breakОператор break прерывает выполнение цикла: Этот цикл должен посчитать сумму всех чисел от одного до ста. Но мы указали максимальное значение для переменной sum, поэтому цикл прервётся, как только sum станет больше maxSum. Компилятор умеет отличать оператор break в конструкции switch от оператора break, который прерывает циклы. Поэтому можно спокойно писать вот такой код: Вот как это будет работать: Важно! Оператор break внутри конструкции switch не может прервать цикл. Оператор continueИногда нам нужно пропустить одну итерацию и перейти к следующей. Для этого используем оператор continue. Этот цикл выведет все числа от одного до ста, кроме тех, которые делятся на три без остатка. Цикл do-while в C++Цикл do-while похож на while, но он сначала выполняет одну итерацию и только потом проверяет верность утверждения: Цикл for в C++Если для работы цикла нужен счётчик, то его запись можно сократить с помощью цикла for, записав логику в скобки: Вот пример такого цикла: В результате мы получим сумму всех чисел от 1 до 200: Вложенные циклыЦиклы, как и другие конструкции, можно размещать внутри других циклов. Вот, например, как вывести сетку с помощью for: Важно! Операторы break и continue влияют на тот цикл, в котором они находятся, а не на родительский. ЗаключениеЦиклы — одни из самых часто используемых конструкций в программировании. Они нужны при чтении данных из файлов, сортировке, отрисовке графики и так далее. Одно из самых полезных применений циклов связано с массивами, о работе с которыми будет отдельная статья. Если вы хотите изучить самые востребованные особенности C++ и стать профессиональным программистом, то записывайтесь на наш курс по разработке на C++. Вы не только изучите теорию, но и выполните массу практических заданий, получите по ним обратную связь и сможете избежать тонны ошибок. Циклы в ПаскалеПри решении задач может возникнуть необходимость повторить одни и те же действия несколько или множество раз. В программировании блоки кода, которые требуется повторять не единожды, оборачиваются в специальные конструкции – циклы. У циклов выделяют заголовок и тело. Заголовок определяет, до каких пор или сколько раз тело цикла будет выполняться. Тело содержит выражения, которые выполняются, если в заголовке цикла выражение вернуло логическую истину (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Общая форма записи Пример на Си : Посчитать сумму чисел от 1 до введенного k Пример бесконечного цикла while — цикл с предусловием, поэтому вполне возможно, что тело цикла не будет выполнено ни разу если в момент первой проверки проверяемое условие окажется ложным. Например, если в приведенном выше коде программы ввести k=-1, то получим результат Цикл с постусловием do. whileОбщая форма записи Использовать цикл do. while лучше в тех случаях, когда должна быть выполнена хотя бы одна итерация, либо когда инициализация объектов, участвующих в проверке условия, происходит внутри тела цикла. Результат выполнения: Параметрический цикл forОбщая форма записи for — параметрический цикл (цикл с фиксированным числом повторений). Для организации такого цикла необходимо осуществить три операции: Эти три операции записываются в скобках и разделяются точкой с запятой ; ;. Как правило, параметром цикла является целочисленная переменная. Пример на Си : Посчитать сумму чисел от 1 до введенного k Результат выполнения Параметры, находящиеся в выражениях в заголовке цикла можно изменить при выполнении операции в теле цикла, например Вложенные циклыВ Си допускаются вложенные циклы, то есть когда один цикл находится внутри другого: Пример : Вывести числа от 0 до 99, по 10 в каждой строке Результат выполнения Рекомендации по выбору циклаПри выборе цикла необходимо оценить необходимость проверки условия при входе в цикл или по завершении прохождения цикла. Операторы прерывания и продолжения цикла break и continueОператор break позволяет выйти из цикла, не завершая его. Пример на Си : Вывести числа от 0 до 99 ниже главной диагонали Результат выполнения Пример на Си : Вывести числа от 0 до 99 исключая числа, оканчивающиеся на 5 или 8 Результат выполнения При вложенных циклах действия операторов break и continue распространяется только на самую внутреннюю структуру, в которой они содержатся. Оператор безусловного перехода gotoОбщая форма записи Пример на Си : Вывести все целые числа от 5 до 0.
|