Audytor.ru

Теплоснабжение "Аудитор"
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Циклы в Паскале

Циклы в Паскале

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

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

Блок схемы циклов

Цикл while (англ. “пока”), он же называется цикл с предусловием, выполняется до тех пор, пока верно указанное условие. Если условие сразу неверно, цикл даже не начнёт свою работу и будет полностью пропущен. Объявляется очень просто: ключевое слово while , далее условие в скобках, и вот уже тело цикла:

Хммм, вам не кажется знакомым действие этого примера? Всё верно, это полный аналог цикла for с настройками (int i = 0; i < 10; i++) . Единственное отличие в том, что на последней итерации i примет значение 10 , так как на значении 9 цикл разрешит выполнение. Ещё интересный вариант, который можно встретить на просторах чужого кода. Работает на основе того факта, что любое число кроме нуля обрабатывается логикой как true :

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

Пока условие не произойдёт, код не пойдёт дальше, застрянет на этом цикле. Как вы уже поняли, оператор if тут не нужен, нужно указывать именно логическое значение, можно даже вот так:

Читайте так же:
Как связать счетчики метрики

Всё, вертимся здесь бесконечно! Если не предусмотрим break , конечно же… Помимо цикла с предусловием есть ещё цикл с постусловием, так называемый do while

Выводы

Операторы инкрементирования и декрементирования:

Тут следует упомянуть о том, что все 3 выражения в цикле for не обязательны.

Например, в блоке инициализации не требуется определять переменные:

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

Вы можете пропустить все 3 блока. Снова убедитесь, что используете break, чтоб закончить цикл, а также изменить счётчик так, чтоб условие для break было истинно в нужный момент.

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

Аватары экспертов Хекслета

Цикл do. while

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

Алгоритм работы цикла do. while в JavaScript

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

Распаковка аргументов с помощью enumerate()

Когда вы используете enumerate() в цикле for, вы говорите Python работать с двумя переменными: одной для подсчета и одной для значения. Все это можно сделать, используя распаковку аргументов.

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

Читайте так же:
Счетчик для выдачи топлива

Сначала создается кортеж с элементами 10 и «а». Затем вы распаковываете его в first_elem и second_elem, присваивая по одному из значений кортежа.

Когда вызывается enumerate() и передается последовательность значений, Python возвращает итератор, а когда вы запрашиваете у итератора следующее значение, он отдает кортеж с двумя элементами: элемент кортежа (счетчик) и значение из переданной последовательности.

В этом примере создается список значений с двумя элементами «a» и «b». Затем значения передаются в enumerate() и присваивается возвращаемое значение enum_instance. Когда выводится enum_instance, можно видеть, что это экземпляр enumerate() с определенным адресом памяти.

Затем используется next() , чтобы получить следующее значение из enum_instance. Первое значение – это кортеж с числом 0 и первым элементом из значений «a».

Повторный вызов next() дает еще один кортеж, на этот раз с числом 1 и вторым элементом из значений «b». Наконец, вызов next() еще раз вызывает StopIteration, так как больше нет возвращаемых значений. Когда метод используется в цикле for, Python автоматически вызывает next() перед началом каждой итерации, пока StopIteration растет.

Если функция возвращает кортеж, можно использовать распаковку аргументов для назначения элементов кортежа нескольким переменным. Это мы делали выше, используя две переменные цикла.

Еще один способ увидеть распаковку аргументов – использовать цикл for со встроенным zip(), позволяющим перебирать две или более последовательности одновременно. На каждой итерации zip() возвращает кортеж, который собирает элементы из всех переданных последовательностей:

В цикле элементы сопоставляются, а затем выводятся. Вы можете объединить zip() и enumerate(), используя вложенную распаковку аргументов:

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

Читайте так же:
Joomla отключить счетчик просмотров материалов

Существуют иные способы эмуляции поведения enumerate() в сочетании с zip(). Один из методов использует itertools.count() , который по умолчанию возвращает последовательные целые числа, начиная с нуля. Вы можете изменить предыдущий пример, чтобы это попробовать:

Работа с массивами

С обычными числами обычно не работают в цикле for. Гораздо чаще цикл используют при работе с массивами.

Основная разница между ними, что массив может состоять из неупорядоченных чисел, а число элементов может быть разным. К счастью, у массива есть специальное свойство length — длина массива. Первый пример можно переписать следующим образом.

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

Например, если мы хотим вывести числа в обратном порядке, меняем логику следующим образом. Теперь нам нужно начинать вывод не с 0, а с 9, т.е. int i = 9 или int i = mice.length — 1 (для универсальности). Шаг будет не увеличиваться, а уменьшаться, значит — i—. А условием станет достижение 0, т.е. i >= 0. Проверяем.

Пример программы, которая считает сумму всех чисел от 1 до 1000. Так же примеры готовых программ можно посмотреть в Шпаргалка по C++.

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

Далее приведен код, с помощью которого можно посчитать вышеуказанную совокупность чисел от 1 до 1000.

В этом случае счетчику требуется дать определенное значение, поскольку в прежнем варианте это значение придавалось внутри кода for, в новом случае, если не провести инициализацию, в цикл попадут «мусорные» значения, и программа может выдать нам ошибки.

Читайте так же:
Тариф водопотребления без счетчика

Далее задается условие – пока переменная i меньше 1000 — выполняй цикл. В процессе итераций величина переменной i будет увеличиваться на 1 внутри цикла.

После выполнения 1000 цикла счетчик примет значение 999, далее циклы выполняться не будут. После проведения цикла следует вывести сообщение, содержащее ответ.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector