Как вы заметили в содержании, на главной странице сайта, в языке C++ применяются несколько видов циклов. Цикл for мы рассмотрим первым, так как его легче понять новичкам, с моей точки зрения. А циклы while и do while, рассмотрены в отдельной статье.
Для начала, разберемся с тем, что означает цикл в программировании. Цикл – это специальный оператор, с помощью которого происходит повторение определённого участка кода определённое количество раз (какой участок кода повторять и когда цикл должен прерваться – определяет программист). Еще одно определение предложил посетитель нашего сайта rrrFer: цикл – конструкция языка, предназначенная для организации повторного исполнения команд. Например, чтобы вывести на экран числа от единицы до пятисот, можно использовать ручной вывод на экран:
Согласитесь – не самое интересное задание и представьте сколько пришлось бы прокручивать колесико мышки, чтобы добраться до конца кода. А можно воспользоваться циклом for и сократить, тем самым в десятки раз, время на написание этой “интересной” программы и сам размер кода. Вот, как можно выполнить эту задачу с применением for:
1 2 3 4 5 6 7 8 9 10 11 12 | #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.
1 2 3 4 5 6 7 8 9 10 11 12 | #include <iostream> using namespace std; int main() { for (int i = 500; i > 0; i--) { cout << i << endl; } return 0; } |
Не обязательно использовать постфиксный инкремент или декремент. Изменяем управляющую переменную так, как того требует задача. Это может быть ++i, i += 2, i += 20, i -= 15… Например:
управляющая переменная i изменяется от 8 до 88 включительно, при этом шаг изменения равен 8. То есть сначала i = 8, на второй итерации 16 и так далее до 88.
управляющая переменная i изменяется от 3000 до 300 включительно, с уменьшением при каждой итерации на 300 (3000, 2700, 2400…)
управляющая переменная i изменяется от 0 до 100 включительно, с увеличением при каждой итерации на 10. (0, 10, 20…100)
управляющая переменная i изменяется от 3000 до 3 включительно, с делением при каждой итерации на 10. (3000, 300, 30, 3)
В дополнение ко всему сказанному, хочу добавить, что все три, используемые в круглых скобках, выражения необязательны. Если сделать такую, к примеру, запись: for( ; ; ) – это будет воспринято компилятором, как запуск так называемого бесконечного цикла. Здесь нет ни управляющей переменной, ни условия продолжения цикла, ни изменения управляющей переменной. То есть цикл будет выполняться бесконечно. В этом случае, чтобы все-таки как-то работать с таким циклом, управляющая переменная может быть определена до цикла, её изменение можно добавить в конец тела for, а условие продолжения цикла можно задать используя оператор if и оператор break. Вот как это будет выглядеть:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #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 ( определение управляющей переменной ; условие повторения цикла ; изменение управляющей переменной )
Так код читается легче, всё необходимое для работы цикла находится в пределах одной строки кода и сколько бы не было циклов в вашем коде, вам не придется утруждаться и придумывать новые имена для управляющих переменных.
Рекомендую посмотреть видео по теме. В нем рассмотрен и цикл while
Практика программирования по этой теме находится здесь – Задачи: Цикл for.
Админ, спасибо что пишешь такие разборчивые статьи. Пиши дальше и никого не слушай. Я тебя как новичок в программировании очень хорошо понимаю!
Виталий, спасибо ) В этом и суть – дать понять элементарное на простых примерах. А для глубокого понимания – тут уж без хороших книг и практики никому не обойтись.
Кстати отмечу, сайт находка для новичка. Перелопатил под сотню ресурсов. Увидел стиль изложения тут и потёр из букмарка все остальные.
Благодарю покорно! Ждем новых уроков. В частности о работе с фалами. Очень важная тема. Спасибо еще раз!!!! Автор крут, реально выручаешь!
Мне тоже нравится! Очень интересно и понятно. Это вообще мой первый сайт..
Спасибо большое за статью! Она очень легкая для понимания!
Спасибо тебе, автор!
Ты один из тех людей, благодаря которым, многое становится доступным при развитии IT технологий в образовании и развитии человека, а это очень крутое дело и крутой вклад.
здравствуйте. объясните пожалуйста, почему в первой задаче условие
cout << i + 1 выполняется только первый раз, а дальше игнорируется?
Кто сказал что дальше игнорируется?
Этот оператор cout << i + 1 выполнится 500 раз.
но тогда куда девается i++ , ведь эта команда тоже должна прибавить единицу ? т.е. сначала cout << 0+1 = 1, на экран выводится 1,
потом выполняется действие i++ и прибавляется еще единица 1+1=2,
2 < 500? меньше,
тогда cout << i + 1, т.е. 2+1=3 и на экран должно выводиться 3, а не 2.
где подвох? без этого "i+1" все прекрасно логически получается.
заранее спасибо.
Получаться должно не “прекрасно логически”, а проверкой работы кода!
Оператор cout << i + 1 – ничего и никак не увеличивает: как было i значением 0 до операции, так и останется 0 после.
И даже cout << i + 1000000 никак не изменит значения i.
cout – это только вывод вычисленного значения, а переменной i никакого присвоения там не показано.
Если не ошибаюсь admin в самом начале писал – “больше практикуйтесь”. Сам тормознул с этим “i+1”, а потом попрактиковался и стало понятнее.
Т.е. больше кодим(практикуемся) и будет нам понятнее.
Объясните мне кто нибудь почему у меня компилятор считает с 299, а не с 500 ?
#include
using namespace std;
int main()
{
for (int i = 500; i > 0; i–)
{
cout << i << endl;
}
return 0;
}
Ни i– ни i-1 одна и таже чушь, цикл продолжает считать на уменьшение, но с 299 в чем прикол не пойму.
У меня в CodeBlocks было тоже самое, если выводить в столбик.
Но если выводить в строчку, то все нормально:
#include
using namespace std;
int main()
{
for (int i = 1; i < 500; i++)
{
cout << i << " ";
}
return 0;
}
#include
using namespace std;
int main()
{
for (int i=500; i>0; i–)
{
cout << i << endl;
}
return 0;
}
Похоже размер вывода консольного окна имеет ограничение в 300 строк. 299 строк – основная работа программы и последняя строчка “Для продолжения нажмите любую кнопку”
Объясните мне кто нибудь почему у меня компилятор считает с 299, а не с 500 ?
#include
using namespace std;
int main()
{
for (int i = 500; i > 0; i–) {b}Вот здесь, слева, в кавычках, возле переменной i ты
поставил ОДИН минус, ПРОСТО РЯДОМ ПОСТАВЬ
ЕЩЕ ОДИН -, и все заработает.[/b]
{
cout << i << endl;
}
return 0;
}
У командной строки лимит 300 строк
9.Из 5-ти чисел найти кол-во четных и нечетных чисел и найти соответственно их суммы.
10. Определить количество простых чисел в интервале от N до M, где N и M натуральные числа.
Помогите пожалуйста написать код с++