Операторы цикла
Познакомимся с первым из них – оператором цикла с предусловием while.
Циклы с предусловием используются тогда, когда выполнение цикла связано с некоторым логическим условием. Оператор цикла с предусловием имеет две части: условие выполнения цикла и тело цикла.
При выполнении оператора while определенная группа операторов выполняется до тех пор, пока определенное в операторе while булево условие истинно. Если условие сразу ложно, то оператор не выполнится ни разу.
Общая форма записи следующая
| while do begin группа операторов end; |
На русском языке это звучит примерно так:
пока выполняется это условие, делай
от начала
группа операторов
до конца;
Вполне понятно, что операторные скобки ставят, чтобы отделить от остальной программы ту группу операторов, которую нужно повторить в цикле. Если в цикле нужно выполнить только один оператор, то операторные скобки не ставят.
При использовании цикла с предусловием надо помнить следующее:
-
значение условия выполнения цикла должно быть определено до начала цикла;
Вернемся к нашей задаче вычисления суммы чисел. При вычислении суммы используем следующий прием: вначале, когда еще не задано ни одно слагаемое, сумму полагают равной нулю (S:=0), а затем, получая очередное слагаемое, прибавляют его к сумме (S:=S+x) (см. программу ниже).
Очень важную роль в операторе цикла играет так называемая переменная цикла. В нашей программе она называется i. С ее помощью мы обращаемся к пользователю за очередным числом (write (‘Введите ‘,i,’-ое число ’)) и считаем количество уже введенных чисел (i:=i+1), чтобы не запросить лишнее. Одновременно переменная цикла участвует в булевом выражении (i<=N).
Рассмотрите внимательно программу, решающую нашу задачу.
| Program Summa; Uses Crt; Var i, N : integer; x, S : real; Begin ClrScr; write (‘Сколько чисел для сложения? ‘); readln (N); S:=0; i:=1; while i begin write (‘Введите ‘,i,’-е число ‘); readln (x); S:=S+x; i:=i+1; end; write (‘Сумма введенных чисел равна ‘,s:5:2); readln; End. |
Хотелось бы, чтобы Вы смогли представить работу этой программы. Давайте попробуем вместе.
Пусть нам требуется сложить следующие числа: 5, 7, -4, 0, 8, 20. Посчитаем, сколько их всего – шесть. Это число мы введем, когда программа задаст вопрос: Сколько чисел для сложения? Теперь наша программа запросит ввести 1-ое число, т. к. на первом шаге переменная i равна 1. Мы введем число 5. Программа считает его в переменную х. Теперь число 5 сложим с числом 0 и результат присвоим переменной S (оператор S:=S+x). В этот момент S становится равной 5. Чтобы перейти к следующему числу, увеличим значение переменной i на 1 (оператор i:=i+1). Выполнение операторов тела цикла закончено. Теперь программа переходит опять к анализу условия вхождения в цикл (i<=N). Переменная цикла i=2, переменная N=6, поэтому значение логического условия 2<=6 равно True. Значит снова выполняется тело цикла:
| while i begin write (‘Введите ‘,i,’-ое число ‘); readln (x); S:=S+x; i:=i+1; end; |
Итак, мы сложили два числа и переходим опять к проверке условия. Ответим на вопрос: 3
| while i begin write (‘Введите ‘,i,’-ое число ‘); readln (x); S:=S+x; i:=i+1; end; |
Аналогично, мы сложим и остальные числа. Но когда же операторы цикла выполнятся последний раз и остановится работа цикла? Когда сложим последнее число. Проверим это.
| while i begin write (‘Введите ‘,i,’-ое число ‘); readln (x); S:=S+x; i:=i+1; end; |
В этом примере известно заранее количество повторений — N раз. Но чаще всего этот вид цикла используется тогда, когда количество повторений заранее не известно и зависит от выполнения какого-либо условия. Рассмотрим еще один пример.
Отвлечемся от цифр и вспомним окружающую жизнь. Сколько циклических алгоритмов можно увидеть вокруг, если внимательно посмотреть на события: чередование времен года, посещения магазинов, школы или секции, получение оценок за контрольные и др. Попробуем записать их.
Например, рассмотрите следующие циклические алгоритмы
а) Пока не сдал выпускные экзамены делай:
начало
готовь уроки;
посещай школу;
конец;
б) Пока есть желание, возможность и здоровье делай:
посещай занятия спортом
Задание. Выберите самостоятельно сказку из предложенных (или придумайте другой циклический алгоритм из жизни или произведений известных авторов) и напишите программы, с помощью которых можно в шутливой форме проверить знания первоклассников.
-
“Репка”. “Дед тянет-потянет, вытянуть не может. Позвал бабку. Бабка за дедку, дедка за репку, тянут потянут, вытянуть не могут. Позвала бабка внучку. И вытянули репку”.
Продолжим изучение цикла с предусловием на примере решения следующей задачи.
Задача. Найти сумму чисел в непустой последовательности.
Рассмотрим алгоритм решения. Пусть нам дана такая последовательность чисел:
3, -4, 0, 5, 19, -20, 6, 2
Для работы нам нужно организовать обращение к каждому элементу последовательности. Нетрудно догадаться, что это будет происходить через порядковый номер каждого члена последовательности. Пронумеруем эти числа:
1 2 3 4 5 6 7 8
3, -4, 0, 5, 19, -20, 6, 2
Получилось, что всего у нас чисел восемь, на первом месте стоит число 3, на втором — число (-4), на третьем — число 0 и т.д. Тогда переменная цикла i будет пробегать числа от 1 до 8, становясь на каждом шаге больше на 1 и запрашивая каждый раз очередное число. Поэтому общая схема цикла будет выглядеть так:
| i:=1; while i begin write (‘Введите ‘,i,’-ое число’); readln (x); . . . i:=i+1; end; |
Здесь N — количество чисел последовательности (в нашем случае 8), х — член последовательности, i — порядковый номер очередного члена последовательности. Просмотрим, как будет работать этот цикл.
| i:=1; while i begin write (‘Введите ‘,i,’-ое число’); readln (x); . . . i:=i+1; end; |
| while i begin write (‘Введите ‘,i,’-ое число’); readln (x); . . . i:=i+1; end; |
| while i begin write (‘Введите ‘,i,’-ое число’); readln (x); . . . i:=i+1; end; |
| while i begin write (‘Введите ‘,i,’-ое число’); readln (x); . . . i:=i+1; end; |
Итак, у нас уже организован цикл считывания чисел. Осталось только вписать в тело цикла оператор, который бы суммировал все эти числа. Для этого опишем переменную Summa в разделе описания переменных и присвоим ей нулевое значение перед выполнением цикла. Тогда при каждом шаге нашего цикла значение этой переменной должно быть изменено на х. Это произойдет при выполнении оператора
Если Вам не совсем понятно, что происходит при выполнении этого оператора, Вам нужно вспомнить, как происходит присваивание значение переменной: сначала вычисляется значение выражения в правой части (в нашем случае Summa+x, т.е., значение переменной Summa увеличиваем на х), а затем присваиваем это значение переменной с именем, записанным в левой части (Summa). Таким образом, в переменной Summa собирается сумма всех считанных чисел.
Задание. Напишите полный текст программы, находящей сумму N чисел последовательности. Дополните программу нахождением среднего арифметического этих чисел.
Примечание. Средним арифметическим чисел называется сумма этих чисел, деленная на их количество.
Циклы в программировании: определение, основные типы и примеры использования

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

Цикл — это конструкция в программировании, которая позволяет выполнять повторяющиеся действия определенное количество раз или пока не выполнится некое условие. Циклы позволяют автоматизировать повторяющиеся задачи и уменьшить объем кода.
Например, цикл может использоваться для повторного ввода данных пользователем до тех пор, пока не будет введено правильное значение.
Пример использования цикла в языке программирования Python для вывода чисел от 1 до 10:
for i in range(1, 11):
Этот цикл начинается с переменной `i`, равной 1, и продолжается до 10 включительно (конечная точка в `range()` не входит в последовательность). Каждое значение `i` выводится на экран с помощью функции `print()`.
Основные типы циклов в программировании
В программировании существует несколько основных типов циклов, каждый из которых используется в зависимости от задачи.
- Цикл for — это цикл со счетчиком, который позволяет выполнить определенное количество итераций. Цикл for применяется для обхода массивов и других коллекций.
- Цикл while — это цикл с предусловием, который выполняется, пока условие истинно. Цикл while используется, когда заранее не известно, сколько раз нужно выполнить определенную операцию.
- Цикл do-while — это цикл с постусловием, который гарантирует выполнение тела цикла хотя бы один раз, а затем проверяет условие и продолжает выполнение цикла до тех пор, пока оно истинно.
- Цикл foreach — это цикл, который позволяет обходить элементы в коллекции. Цикл foreach используется для работы с массивами, списками и другими коллекциями.
Кроме того, в некоторых языках программирования существуют специальные циклы, такие как циклы векторизации и циклы с предикатами, которые используются для работы с большими объемами данных или для выполнения параллельных операций.

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

- Обработка данных в больших объемах. К примеру, циклы используются в программном обеспечении для обработки больших объемов данных, например, обработки транзакций в банковских системах.
- Работа с массивами. Циклы часто используются для обработки элементов массивов, например, для суммирования значений, нахождения минимального или максимального значения, сортировки элементов и т.д.
- Итерации по элементам пользовательского интерфейса. Циклы могут использоваться для обработки элементов пользовательского интерфейса, таких как таблицы, списки, деревья и т.д. Например, для обработки всех элементов таблицы или списка, добавления новых элементов или удаления существующих.
- Автоматизация процессов. Циклы используются для автоматизации повторяющихся процессов, таких как создание отчетов, обработка файлов и т.д. Например, цикл может использоваться для обработки всех файлов в директории, чтобы выполнить определенное действие для каждого файла.
Контроль циклов в программировании
Важно правильно выбирать тип цикла и контролировать выполнение, чтобы избежать бесконечного выполнения и других проблем.
Один из способов контроля циклов — использование условных операторов, таких как if, которые проверяют условия выхода из цикла. Например, можно использовать условие выхода из цикла при достижении определенного значения или при выполнении условия.
Также можно использовать счетчик, чтобы ограничить количество итераций цикла. Счетчик увеличивается на каждой итерации, и когда он достигает определенного значения, цикл завершается.
Еще один способ контроля циклов – это использование исключений. Если происходит ошибка во время выполнения цикла, можно использовать исключение для завершения цикла.
В целом, контроль циклов – это часть разработки программного кода, которую нужно учитывать при написании любого цикла в программе. Но важно избегать бесконечного выполнения циклов, чтобы избежать сбоев программы и утечки ресурсов.
Оптимизация циклов
Оптимизация циклов — важная часть оптимизации программного кода в целом, поскольку циклы могут потреблять много ресурсов и замедлять выполнение программы. Вот некоторые методы оптимизации циклов:
- Уменьшение количества итераций. Если вы знаете заранее, сколько раз нужно выполнить цикл, можно использовать цикл for, чтобы уменьшить количество итераций.
- Использование более эффективных операций. При работе с массивами данных лучше использовать специальные операции, методы, оптимизированные для поиска, добавления или удаления элементов.
- Избегание излишних вычислений. Можно избежать повторных вычислений, сохраняя результаты и используя их снова, а не пересчитывать каждый раз.
- Работа с памятью. Можно уменьшить количество операций с памятью путем использования более эффективных алгоритмов и структур данных, которые минимизируют количество операций записи и чтения из памяти.
- Использование параллелизма. Можно использовать параллельные вычисления, чтобы выполнить циклы на нескольких ядрах процессора одновременно, что значительно ускорит выполнение программы.
Оптимизация циклов позволяет повысить производительность программы и уменьшить потребление ресурсов.
Циклы в различных языках программирования
Циклы — это одна из базовых конструкций в любом языке программирования, и каждый язык имеет свои особенности при их использовании.
Java
В Java используются три основных типа циклов — for, while и do-while. В отличие от некоторых других языков, в Java цикл for представляет собой специализированную версию цикла while.
Python
Python поддерживает циклы for и while. Однако в Python нет отдельной конструкции цикла do-while.
C/C++
В языках C/C++ используются те же три типа циклов, что и в Java. Однако в C/C++ цикл for часто используется для обхода массивов и других коллекций.
JavaScript
В JavaScript используются два типа циклов — for и while. Как и в Python, в JavaScript нет отдельной конструкции цикла do-while.
Ruby
В Ruby используется конструкция цикла for, которая похожа на цикл for в Python. В Ruby также есть конструкции цикла while и until.
PHP
В PHP используются те же три типа циклов, что и в Java и C/C++. В PHP также есть конструкция цикла foreach для обхода массивов и других коллекций.
Кроме того, каждый язык программирования имеет свои уникальные особенности в использовании циклов. Например, в Python можно использовать цикл for для обхода не только массивов, но и строк и других последовательностей. В JavaScript есть возможность использовать циклы для обхода свойств объектов.
При написании кода с использованием циклов важно учитывать специфические особенности языка программирования, чтобы избежать ошибок и улучшить производительность.
Заключение
Циклы являются важным элементом в программировании и могут значительно облегчить процесс обработки данных. Однако, неправильное использование циклов может привести к проблемам с производительностью и даже к бесконечному выполнению кода.
Понимание основных принципов циклов и их использование в реальных проектах является важным компонентом программистской грамотности.
Цикл «для» в Кумире
Часто в различных алгоритмах приходится выполнять одну и туже последовательность действий многократно. Для организации подобного рода повторений используются конструкции, которые называются циклами.
Рассмотрим простую задачу: необходимо определить сумму чисел на отрезке от 10 до 20.
Для решения поставленной задачи можно поступить следующим образом:
- Введем величину S , в которой будем накапливать сумму заданной последовательности чисел, и присвоим ей начальное значение S := 0
- Для контроля числового диапазона введем параметр, начальным значением которого будет значение левого края отрезка (текущее значение), а конечным — правого. Назначим параметру, исходя из условия задачи, шаг изменения равным 1.
- Добавим к величине S текущее значение параметра.
- Будем возвращаться к пункту 2, увеличивать текущее значение на шаг изменения параметра и выполнять пункт 3 до тех пор, пока не достигнем конечного значения.
Для описания подобного рода алгоритмов в Кумире можно использовать цикл «для», запись которого имеет следующий формат:
- нц для i от i1 до i2
- тело_цикла
- кц
Величина i называется параметром цикла. i1 и i2 являются соответственно начальным и конечным значениями параметра. Параметр управляет количеством повторений тела цикла ( i2 – i1 + 1). Параметр цикла должен иметь тип цел .
Важно! Параметр цикла нельзя изменять в теле цикла.
Тело цикла представляет собой последовательность команд, которая должна, в условиях данного алгоритма, выполняться многократно.
Анализ описания формата записи показывает, что цикл «для» может быть использован, если известно количество повторений тела цикла .
Приведем фрагмент кода выше рассмотренного алгоритма на языке Кумир.
- S := 0
- нц для i от 10 до 20
- S := S + i
- кц
При таком формате записи цикла для начальное значение параметра должно быть не больше конечного. В противном случае, тело цикла не выполнится ни разу.
По умолчанию шаг изменения параметра равен 1. Если значение шага должно быть отличным от 1, то применяется следующий вид цикла для :
- нц для i от i1 до i2 шаг d
- тело_цикла
- кц
Заметим, что значение шага может быть отрицательным, в таком случае начальное значение параметра должно быть больше конечного. Рассмотрим пример:
Приведем фрагмент кода, реализующий цикл с параметром для решения поставленной задачи:
Задача: выведите через пробел все четные числа от 100 до 0
- нц для i от 100 до 0 шаг -2
- вывод i, » «
- кц
Вопросы для самопроверки
- В каких случаях используется оператор цикла с параметром?
- Какую роль играет параметр цикла?
- Какой тип данных может принимать параметр цикла?
- Что представляет собой тело цикла?
- Может ли тело цикла с параметром не выполниться ни разу?
- С помощью какой величины можно управлять изменением параметра цикла?
- Как должен быть оформлен оператор цикла с параметром, чтобы тело цикла выполнялось при уменьшающихся значениях параметра цикла?
Copyright © 2014-2021, Урок информатики
Все права защищены
Круги на полях — используем циклы!
Что такое цикл? Проще всего начать, как это ни странно, с симпсонов. В заставке к сериалу один из героев, Барт, каждый раз пишет одну и ту же строку на доске множество раз.

Если в предсказанном фантастами будущем кто-то решит сделать робота-Барта, то его программа будет выглядеть примерно так:
print("Я устал от одинаковых команд") print("Я устал от одинаковых команд") print("Я устал от одинаковых команд") print("Я устал от одинаковых команд") print("Я устал от одинаковых команд") print("Я устал от одинаковых команд") # и так далее, и так далее, и так далее
В коде выше мы видим множество одинаковых команд, которые приходится просто копировать. Допустимо ли это? Возможно, но только не в программировании! Я уже как то говорил, что основной мотор для развития языков программирования — это лень программистов. Если какую-то задачу можно упростить, то рано или поздно так и будет сделано. Звучит абсурдно, но если тратить меньше времени на простые задачи, то можно сделать больше за то же время, а значит — получить больший доход.
Когда в программе используются похожие участки кода, программисты стараются разными способами от них избавиться, это называется повторным использованием кода. Для этого используется множество разных способов, таких как создание функций, выделение функций в модули, использование наследования в ООП и тд. Но самый простой и самый действенный — это использование циклов.

Цикл — разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций.
В питоне есть два вида циклов — while и for , и сначала мы познакомимся именно с while . В переводе на русский, while — это пока . Логически конструкция выглядит так:
while условие: повторяемый код повторяемый код
Часть кода, которая повторяется в цикле, называется телом цикла, а одно повторение — итерацией цикла.
Как видишь, структура цикла очень похожа на условный оператор if — тот же отступ внутри блока и двоеточие после условия. Но если условный оператор выполняет код если условие верно, то цикл выполняет его пока условие верно.
Цикл с заранее известным числом итераций
Рассмотрим задачу с робо-Бартом. Предположим, что строку нужно повторить 10 раз.

Решение на Python будет выглядеть так:
i = 0 while i < 10: print("Повторяем строку", i, "раз!") i = i + 1
Результат:
Повторяем строку 0 раз! Повторяем строку 1 раз! Повторяем строку 2 раз! Повторяем строку 3 раз! Повторяем строку 4 раз! Повторяем строку 5 раз! Повторяем строку 6 раз! Повторяем строку 7 раз! Повторяем строку 8 раз! Повторяем строку 9 раз!

В примере выше мы использовали цикл с известным числом итераций. Т.е. к началу цикла мы уже знаем, сколько раз он должен повториться. Чтобы следить, что мы выполняем цикл ровно столько раз, сколько нужно, в циклах с известным числом итераций используются счетчики.
Счетчик - переменная, в которой хранится количество уже выполненных на данный момент итераций цикла.
Цикл в таком случае выглядит, как "пока счетчик меньше нужного значения, повторить тело".
В нашем примере выше, счетчик - это переменная i . В качестве имен для счетчиков обычно используются буквы i , j или k , но на логику программы это не влияет. Счетчик - это совершенно обычная переменная, в которой лежит числовое значение.
Заранее известное значение - это не обязательно число, это может быть и переменная. Например, вот так мы можем посчитать сумму чисел в заданном промежутке:
summa = 0 start = int(input("Нижняя граница: ")) end = int(input("Верхняя граница: ")) while start
Результат:
Нижняя граница: 50 Верхняя граница: 100 3825
Будьте внимательны! Самая частая ошибка - это забыть изменить значение счетчика в конце итерации. В таком случае ваш цикл будет повторяться вечно, и программа никогда не завершится.
Циклы с неизвестным числом итераций
Но число итераций, нам известно заранее далеко не всегда. Например, программа может продолжать выполнять операции, пока пользователь не введет конкретную команду:
answer = "" while answer.lower() != "да": print("Вы согласны с лицензионным соглашением? (да/нет):") answer = input()
В данном случае цикл будет повторяться, пока пользователь не введет "да". Кстати, что делает .lower() ? Очень просто - делает все буквы в строке строчными.
Вечный цикл, break и continue
Иногда цикл бывает удобно записать, как вечный, а затем при каких-то условиях выйти из него. Выглядит это так:
while True: print("Вы согласны с лицензионным соглашением? (да/нет):") answer = input() if answer.lower() != "да": break print("Мы рады, что вы согласны!")
True - это истина. Т.е. условие while True всегда истинно, и цикл сам по себе никогда не закончится. Но ему можно помочь.
- команда break прерывает цикл, в котором находится.
- команда continue переводит нас на следующую итерацию цикла (в цикле while - просто возвращает в к началу итерации).
Например, если мы хотим вывести числа до 100, которые не делятся на 3 и 5, можно сделать так:
i = 0 while True: # если число делится на 3 или на 5 - пропускаем его if i % 3 == 0 or i % 5 == 0: continue # если дошли до 100 - тормозим if i == 100: break print(i) i += 1
Отличный способ применить это на практике - доделать нашу старую задачу с игрой в "угадай число".
Программа загадывает пользователю число от 1 до 50, и пока он не отгадает его, дает подсказки "больше-меньше". Вот только теперь для отгадывания числа должно быть ограниченное количество попыток, а после завершения раунда (если число отгадано или попытки закончились) игра должна, при желании пользователя, загадывать новое число. А еще можно запоминать рекордное число попыток среди всех раундов в этой игре.