Цикл for
У большинства циклов со счётом одни и те же три части: переменная, созданная перед циклом, условие и изменение в конце блока:
int number = 1; // начало
while (number <= 5) { // условие
std::cout << number << std::endl;
number++; // шаг
}Такой счёт встречается так часто, что в C++ есть цикл, который собирает все три части в одной строке, — for:
for (int i = 1; i <= 5; i++) {
std::cout << i << std::endl;
}Оба цикла выводят одно и то же:
1
2
3
4
5В круглых скобках после for стоят три части, разделённые точками с запятой (;):
int i = 1— начало. Оно создаёт переменную цикла и выполняется только один раз, раньше всего остального.i <= 5— условие. Оно проверяется перед каждой итерацией. Когда оно ложно, цикл заканчивается.i++— шаг. Он выполняется после каждой итерации, когда блок закончил работу.
Порядок такой: начало, условие, блок, шаг, условие, блок, шаг и так далее. В нашем цикле i равно 1, 1 <= 5 истинно, блок выводит 1, шаг делает i равным 2, 2 <= 5 истинно, блок выводит 2… После вывода 5 шаг делает i равным 6, 6 <= 5 ложно, и цикл заканчивается.
Переменную цикла часто называют i, но подойдёт любое имя. Она существует только внутри цикла. Если вывести i после цикла, Clang сообщит error: use of undeclared identifier 'i'. Зато у каждого цикла может быть своя i.
Счёт в обратную сторону и с шагом. Чтобы считать в обратную сторону, начните с наибольшего числа, продолжайте, пока переменная не меньше наименьшего, и уменьшайте её с помощью i--:
for (int i = 3; i >= 1; i--) {
std::cout << i << std::endl;
}
std::cout << "Пуск!" << std::endl;3
2
1
Пуск!Чтобы считать не по одному, используйте += или -= в шаге. Этот цикл считает пятёрками:
for (int i = 0; i <= 20; i += 5) {
std::cout << i << std::endl;
}0
5
10
15
20Следите за условием: i < 5 останавливается на 4, а i <= 5 — на 5. Ошибка на единицу — самая частая ошибка с for. И разделяйте три части точками с запятой, а не запятыми.
for или while? Используйте for, когда заранее известно, сколько раз выполнится цикл: от 1 до 10 или по разу для каждого элемента вектора (это следующее упражнение). Используйте while, когда это заранее неизвестно, например, когда число удваивают, пока оно не станет больше 1000:
int number = 1;
int doublings = 0;
while (number <= 1000) {
number = number * 2;
doublings++;
}
std::cout << "Удвоений: " << doublings << std::endl;
std::cout << "Число: " << number << std::endl;Удвоений: 10
Число: 1024Задание
- 1
Перепишите цикл
whileв редакторе как циклforи удалите циклwhile. Программа по-прежнему выводит числа от 1 до 5. - 2
Измените цикл так, чтобы он выводил числа от 1 до 10 включительно.
- 3
Под ним напишите второй цикл
for, который считает в обратную сторону от 20 до 0 пятёрками:20,15,10,5и0, каждое в своей строке. В качестве шага используйтеi -= 5.