Цикл for

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

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

#include <iostream>

using namespace std;

 

int main()

{

for (int i = 0; i < 500; i++)

{

cout << i + 1 << endl;

}

return 0;

}

Мы начинаем определять наш цикл в строке 6 . Для этого пишем ключевое слово for и за ним круглые скобки () . В круглых скобках объявляется управляющая переменная (переменная-счетчик) i. В нашем случае, она инициализирована нулем. После инициализации стоит точка с запятой ; . Далее располагаем условие: i < 500 (оно означает, что пока i меньше 500, код в теле цикла будет повторяться) и снова точка с запятой ; . Именно оно и будет «говорить» программе до каких пор будет выполняться тело цикла (код в фигурных скобках {}). Напоследок указываем, как будет изменяться i с каждым шагом цикла (у нас — увеличение на единицу, используя постфиксный инкремент). Если описать одним предложением, то, что расположено в круглых скобках, команда будет звучать так — выполнять тело цикла, пока переменная i меньше пятисот, увеличивая i на единицу, при каждом шаге цикла. Шаг цикла еще называют итерацией. А переменную-счетчик — управляющей переменной, так как она управляет количеством итераций.

Разберем для наглядности несколько шагов цикла из нашего примера. При первой итерации цикла управляющая переменная равна 0. Поэтому для вывода на экран единицы используем выражение i + 1 (0 + 1). Когда тело цикла выполнилось, происходит изменение (увеличение) управляющей переменной iтак, как мы указали в круглых скобках () после оператора for — то есть она становится равной единице. Вторая итерация начинается с проверки условия (у нас i < 500). Если i действительно < 500, выполнение тела цикла повторится — на экран снова покажется i + 1, что эквивалентно 1 + 1, то есть 2. Последний раз цикл выполнится, когда управляющая переменная будет равна 499 и на экран покажется значение i + 1 (499 + 1). После этого её значение снова увеличится на единицу, но условие повторения цикла уже не будет выполняться, так как i (500) уже не меньше 500. После завершения работы цикла программа перейдет к выполнению следующей строки кода, расположенной за закрывающей } фигурной скобкой тела цикла. Результат выполнения программы посмотрите сами, запустив программу.

Управляющая переменная может как увеличиваться так и уменьшаться. В зависимости от того, какая задача поставлена перед программистом. Посмотрите на этот код. При его выполнении, на экране мы увидим числа, расположенные по убыванию, от 500 до 1.

#include <iostream>

using namespace std;

 

int main()

{

for (int i = 500; i > 0; i--)

{

cout << i << endl;

}

return 0;

}

Не обязательно использовать постфиксный инкремент или декремент. Изменяем управляющую переменную так, как того требует задача. Это может быть ++ii += 2,i += 20i -= 15… Например:

управляющая переменная i изменяется от 8 до 88 включительно, при этом шаг изменения равен 8. То есть сначала i = 8, на второй итерации 16 и так далее до 88.

управляющая переменная изменяется от 3000 до 300 включительно, с уменьшением при каждой итерации на 300 (3000, 2700, 2400…)

управляющая переменная изменяется от 0 до 100 включительно, с увеличением при каждой итерации на 10. (0, 10, 20…100)

управляющая переменная изменяется от 3000 до 3 включительно, с делением при каждой итерации на 10. (3000, 300, 30, 3)

В дополнение ко всему сказанному, хочу добавить, что все три, используемые в круглых скобках, выражения необязательны. Если сделать такую, к примеру, запись: for( ; ; ) — это будет воспринято компилятором, как запуск так называемого бесконечного цикла. Здесь нет ни управляющей переменной, ни условия продолжения цикла, ни изменения управляющей переменной. То есть цикл будет выполняться бесконечно. В этом случае, чтобы все-таки как-то работать с таким циклом, управляющая переменная может быть определена до цикла, её изменение можно добавить в конец тела for, а условие продолжения цикла можно задать используя оператор if и оператор break. Вот как это будет выглядеть:

#include <iostream>

using namespace std;

 

int main()

{

int i = 1; // объявление и инициализация управляющей переменной

 

for (;;) // запуск бесконечного цикла

{

cout << i << endl;

 

if (i == 5) // условие прерывания бесконечного цикла

break;  // прервать цикл, если условие - истина

i++; // изменение управляющей переменной

}

 

return 0;

}

Отмечу, что существует такое понятие, как область видимости переменной. В этом примере область видимости переменной i — тело главной функции main(). А в предыдущих примерах, она ограничивалась телом цикла for и за его приделами эта переменная уже была недоступна (к ней уже нельзя было обратиться — вывести её значение на экран, например) Это надо иметь ввиду. Так как, если в программе встречаются несколько циклов и управляющие переменные определяются выше в коде, а не в круглых скобках () после операторов for , для каждой необходимо придумывать уникальное имя. Или каким-то другим образом выходить из этой ситуации. Так что лучше пользоваться стандартным синтаксисом:

for ( определение управляющей переменной ; условие повторения цикла ; изменение управляющей переменной )

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