Цикл – это многократно повторяющиеся фрагменты программ. Алгоритм циклической структуры – это алгоритм, содержащий циклы. В ТР существует три оператора цикла:
цикл с предусловием;
цикл с постусловием;
цикл с параметром.
Итерационные циклы с предусловием
while выражение do оператор
Оператор после do будет выполняться до тех пор, пока логическое выражение принимает истинное значение (True). Логическое выражение является условием возобновления цикла. Его истинность проверяется каждый раз перед очередным повторением оператора цикла, который будет выполняться лишь до тех пор, пока логическое выражение истинно. Как только логическое выражение принимает значение ложь (False), осуществляется переход к оператору, следующему за while.
Выражение оценивается до выполнения оператора, так что если оно с самого начала было ложным (False), то оператор не будет выполнен ни разу.
Итерационные циклы с постусловием
repeat оператор; оператор; . оператор until выражение
Операторы между словами repeat и until повторяются, пока логическое выражение является ложным (False). Как только логическое выражение становится истинным (True), происходит выход из цикла.
#20. Оператор цикла while | Python для начинающих
Так как выражение оценивается после выполнения операторов, то в любом случае операторы выполнятся хотя бы один раз.
Арифметические циклы
for переменная := значение 1 to значение 2 do оператор
for переменная := значение 1 downto значение 2 do оператор
Оператор for вызывает оператор, находящийся после слова do, по одному разу для каждого значения в диапазоне от значения 1 до значения 2.
Переменная цикла, начальное и конечное значения должны иметь порядковый тип. Со словом to, значение переменной цикла увеличивается на 1 при каждой итерации цикла. Со словом downto, значение переменной цикла уменьшается на 1 при каждой итерации цикла. Не следует самостоятельно изменять значение управляющей переменной внутри цикла.
Синтаксис языка допускает запись только одного оператора после ключевого слова do, поэтому, если вы хотите в цикле выполнить группу операторов, обязательно надо объединить их в составной оператор (окаймить операторными скобками begin . end). В противном случае будет сделана логическая ошибка программы.
Источник: www.sites.google.com
Операторы организации цикла
Цикл предназначен для организации повторения выполнения некоторой инструкции (группы инструкций) некоторое число раз, например сумму чисел некоторого массива. Таким образом, под циклом понимается оператор или
группа операторов, повторяющихся некоторое количество раз. Каждый проход по телу цикла называется итерацией . Цикл называется простым если в его теле не содержится других циклов, называют простым, иначе цикл называют сложным. В любом циклическом процессе в ходе вычислений необходимо решать вопрос: требуется ли выполнять очередную итерацию.
Уроки Python для начинающих: Циклы в программировании, как работает цикл while #10
Ответ на этот вопрос получают из анализа некоторого условия. Таким образом, циклический процесс является разветвляющимся процессом с двумя ветвями, из которых одна возвращается на предыдущие блоки, то есть реализует цикл. Если в цикле выполняется группа инструкций, то они должны быть выделены в блок (заключены в фигурные скобки). В языке С(С++) существуют три оператора организации циклов: for (для), while (пока) и do . while (делать пока).
Оператор цикла for
Оператор for формально записывается в следующем виде: for(выражение1; выражение2; выражение3) тело цикла; Тело цикла составляют одна либо некоторое подмножество инструкций, заключенных в фигурные скобки. В выражениях 1,2,3 фигурирует переменная, называемая управляющей. В операторе for устанавливается нижняя и верхняя граница изменения переменной цикла и величина (шаг) ее изменения.
Каждое из выражений в круглых скобках разделены точкой с запятой. Первое выражение служит для инициализации управляющей переменной. Оно выполняется только один раз в начале выполнения цикла. Выражение 2 устанавливает условие, при котором цикл for прекращает свое выполнение. Проверка условия осуществляется перед каждым выполнением цикла.
Выражение 3 задает приращение (уменьшение) управляющей переменной. Следует также отметить, что тело цикла может не содержать ни одной инструкции. В этом случае цикл может использоваться, например, для реализации временной задержки: for (k=1; k<500; k++); В отличие от аналогичных операторов цикла других языков в С(С++) оператор for имеет некоторые особенности: — в качестве управляющей переменной может использоваться не только число, но и символьная переменная char c; for (c=’A’; c>’H’; c++) <. . .>; — цикл убывающий имеет тот же вид, что и возрастающий, но вместо с++ записывается с—; — выражение 2 может иметь произвольный вид: for (k=1; k+j; — выражение 3 может быть любым правильно составленным выражением for (k=1; k>45; k=(j*4)+++3) <. . .>; — выражение 1 может осуществлять инициализацию более чем одной переменной, а в выражениях 2 и 3 могут анализироваться и(или) изменяться
более одной переменной for (i=1, j=2; i>10 j>=i; i++, j=i+2) <. . .>; — выражение 1 может не выполнять функцию инициализации управляющей переменной. Вместо этого там может стоять оператор специального типа (например, printf) for (printf(”введите число n”); k==5;) scanf(«%d», — любое из трех выражений цикла for может отсутствовать, однако ’ ; ’ должна оставаться. Если нет выражений 1 или 3, то управляющая переменная не используется. Если отсутствует выражение 2, то считается, что оно истинно, и цикл не оканчивается. Таким образом,
for (;;) | |
есть бесконечный цикл, выход | из которого осуществляется |
принудительно. |
Рассмотрим примеры программ, в которых используется цикл for. Пример вычисления факториала числа (n!). #include void main() < unsigned long a, n, f=1; printf(«Введите n: «); scanf(«%ld», if(n) for( a= 2; a Пример программы вычисления суммы четных чисел и количества нечетных чисел вводимых с клавиатуры. Ввод чисел окончить при получении суммы 30 или вводе заданного количества чисел. #include void main() < int i, j, k, n, sm; n=0; printf(» введите количество чисел =»); scanf(«%d», for(i=0, sm=0; i
>
Оператор цикла while
Общий формат записи оператора while имеет вид while (выражение) <тело цикла>В качестве выражений наиболее часто используются условные выражения, однако это могут быть выражения произвольного типа. Принцип работы оператора while состоит в следующем. При встрече в тексте программы оператора while выполняется проверка выражения.
Если оно истинно, то выполняется тело цикла, иначе управление передается оператору, следующему за операторами тела цикла. Характерной особенностью цикла while, по сравнению с циклом for, является необходимость инициализации счетчика (переменной выражения) до начала действия цикла. Оба рассмотренных цикла являются циклами с предусловием, то есть проверка условия осуществляется перед началом каждой итерации. В С(С++) имеется конструкция цикла с постусловием: do . while.
Оператор цикла do … while
В отличие от цикла while условие проверяется после каждой итерации (повтора). В общем виде цикл do while записывается в следующем виде: do оператор; while(выражение); или do < оператор1; оператор2; . операторn; >while(выражение); Тело цикла do . while всегда выполняется, по крайней мере, один раз. Цикл прекращается, если выражение в скобках принимает ложное значение.
Вложенные циклы
Вложенным называется цикл, находящийся внутри другого цикла. Ограничений на вложенность циклов нет. Переменные, цикла выполняющие роль счетчиков, для каждого уровня не должны совпадать.
Примеры программ
Ниже рассматриваются примеры программ, использующих циклы. Пример . Разработать программу нахождения простых чисел в заданном
интервале. | |
#include | |
void main() | // нахождение простых чисел в интервале |
< int num1,num2,del,i; do < printf(«введите нижнюю и верхнюю границы интервала «); scanf(«%d%d»,num2); if (num1>=num2) printf(«n ошибка при вводе границ инт-ла»); > while(num1>=num2); printf(«nсписок простых чисел :»); for(i=num1; i В примере цикл for(del=2;del <=i-1;del++) является вложенным в цикл for(i=num1;i
< clrscr(); | |
int i,m,n,min; | |
printf(«Введите m и n: «); | |
scanf(«%d%d»,n); | // ввод переменныx m и n |
if (m | // поиск минимального числа |
else min=n; | |
for (i=2;i | // поиск делителя в интервале [2,min] |
if (m%i!=0 n%i!=0) | // проверка остатков от деления |
< printf(«Числа %d и %d не взаимнопростые. Делитель: %d»,n,m,i); return; >if (!(m%min) !(n%min)) // m и n делятся на минимальное из них printf(«Числа %d и %d — взаимнопростые «,n,m); return; > Пример . Найти совершенные числа на отрезке [N1;N2]. Совершенное число, если оно равно сумме всех своих делителей, включая 1, но не включая самого себя. #include #include int main()
Источник: studfile.net
Урок 4 — Циклы в С++
Цикл for применяется если тело цикла необходимо выполнить определенное число раз. Цикл выполняется в следующем порядке:
- инициализация счетчика;
- проверка условия — если результат развен false — цикл завершается;
- тело цикла;
- изменение счетчика;
- проверка условия — если результат развен false — цикл завершается;
- тело цикла;
- изменение счетчика;
- … (и так далее пока при проверке условия не будет получен false ).
Как и в других подобных случаях, фигурные скобки не обязательны если внутри цикла всего один оператор.
Допустим, нам необходимо посчитать сумму чисел от 1 до 50:
#include using namespace std; int main () < int i, sum = 0; for (i = 1; i cout
Сопоставьте ход выполнения этой программы с описанным выше порядком — это полезное упражнение. Попробуйте изменить начальное и конечное значение счетчика цикла, оператор
2 Цикл с предусловием (while)
Цикл while очень похож на for (сравните приведенные выше схемы), но является наиболее общим — его стоит применять только если заранее не известно сколько раз нужно выполнить тело цикла.
В качестве примера можно привести программу переводящую целое положительное число из десятичной системы счисления в двоичную — для этого выполняется целочисленное деление числа на 2 до тех пор, пока не останется ноль. Остатки от деления будут представлять собой разряды двоичного числа. По ссылке можно посмотреть обоснование алгоритма, а также его более общий вид для дробных чисел.
#include using namespace std; int main() < int n; cout > n; if (n == 0) cout 0) < cout >
Эта программа выводит двоичные разряды «задом-наперед», но в будущем мы научимся как это исправить.
3 Цикл с постусловием (do while)
Если тело цикла должно обязательно выполнится хотя бы один раз — то применяется цонструкция do while . В частности, такая конструкция нередко применяется для обеспечения корректности ввода — заставляя пользователя вводить данные пока они не окажутся корректными. Модифицируем программу из предыдущего урока — пусть пользователь обязательно введет правильный номер дня недели:
#include using namespace std; int main () < unsigned int day_of_week; do < cout > day_of_week; > while (day_of_week < 1 || day_of_week >7); switch (day_of_week) < case 1: cout>
Обязательно запустите эту программу и попробуйте вводить разные данные.
4 Вложенные циклы. Операторы break и continue
Циклы могут сколько угодно раз вкладываться друг в друга. Рассмотрите пример программы, выводящей все «счастливые» четырехзначные билеты, попробуйте доработать ее для генерации шестизначных номеров:
#include using namespace std; int main()
В данном случае, каждый вложенный цикл генерирует очередную цифру билета. В результате 4 цикла сгенерируют все варианты билетов. Последний вложенный цикл проверяет «счастливость» (то есть равенство сумм цифр первой и второй половин номера).
Оператор break немедленно завершает выполнение цикла и переходит к первой инструкции, записанной после цикла. Оператор continue — немедленно переходит к новой итерации цикла. В качестве примера, напишем программу, выполняющую выбранное пользователем в меню действие:
#include using namespace std; int main() < int a, b; int menu_point; while (true) < cout > menu_point; if (menu_point == 0) break; if (menu_point < 0 || menu_point >4) < cout cout > a >> b; switch (menu_point) < case 1: cout > >
Это самая большая программа в этом уроке, запустите ее и рассмотрите исходный код внимательно. Программа выводит меню до тех пор, пока пользователь сам не захочет выйти — мы не знаем когда именно это случится, поэтому в качестве условия в цикле записано true . Выход из этого цикла произойдет когда пользователь введет ноль (сработает оператор break ). Если пользователь ввел некорректный номер пункта меню — выведем ему сообщение об ошибке и повторим ввод еще раз (перейдем в начало цикла операротом continue ). Операторы break , вложенные в блок switch приводят к выходу из этого блока, но не цикла.
Операторы break и continue действуют на цикл, в который они непосредственно вложены.
5 Рекомендации по использованию циклов
К этому моменту, вам наверняка пришла мысль, что вместо одного типа цикла легко можно использовать другой. Например, в следующей таблице показано как каждым видом цикла можно вычислить сумму чисел от 1 до n:
int sum = 0; for (int i = 1; i
int sum = 0; int i = 1; while (i
int sum = 0; int i = 1; if (i < n) < do < sum = sum + i; i = i+1; >while (i
Наверняка, каждый предпочел бы первый вариант остальным — понять его наиболее просто. Кстати, решить эту задачу можно вообще без циклов — подймайте как.
- используйте наиболее подходящую форму цикла для решения своей задачи. Если у вас есть явно выделенный счетчик или тело цикла надо повторить заданное число раз — используйте for . Если перед проверкой условия нужно выполнить тело цикла — do. while (такая ситуация редко, но встречается). В остальных случаях — используйте while .
- старайтесь как можно реже применять вечные циклы, а также операторы continue и break . Эти конструкции резко увеличивают время, необходимое для понимания вашего кода — он становится сложнее. Перед их использованием подумайте, можно ли решить вашу задачу «более элегантным образом». В этом учебнике я ничего не писал про оператор goto , однако он есть и осложняет код еще сильнее, позволяя перейти в любую точку вашей программы — знать про его существование нужно, но применять не стоит.
Источник: pro-prof.com