0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#Руководства</a></p>
1
<p><a>#Руководства</a></p>
2
<ul><li>8 июн 2020</li>
2
<ul><li>8 июн 2020</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Разбираемся, как сократить повторяющийся код в C++ и сэкономить время.</p>
4
</ul><p>Разбираемся, как сократить повторяющийся код в C++ и сэкономить время.</p>
5
<p> vlada_maestro / shutterstock</p>
5
<p> vlada_maestro / shutterstock</p>
6
<p>Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.</p>
6
<p>Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.</p>
7
<p>Это шестая часть из серии статей<strong>"Глубокое погружение в C++"</strong>. В <a>прошлый раз</a>мы узнали, как использовать функции и процедуры. Сейчас поговорим о циклах<em>while, do-while</em>и<em>for.</em></p>
7
<p>Это шестая часть из серии статей<strong>"Глубокое погружение в C++"</strong>. В <a>прошлый раз</a>мы узнали, как использовать функции и процедуры. Сейчас поговорим о циклах<em>while, do-while</em>и<em>for.</em></p>
8
<p>Циклы - это разновидность условных конструкций. Они позволяют выполнять команды несколько раз, если определённое утверждение верно. Например, с помощью циклов можно пять раз вывести на экран какую-нибудь надпись или посчитать сумму всех чисел.</p>
8
<p>Циклы - это разновидность условных конструкций. Они позволяют выполнять команды несколько раз, если определённое утверждение верно. Например, с помощью циклов можно пять раз вывести на экран какую-нибудь надпись или посчитать сумму всех чисел.</p>
9
<p>Запись цикла<em>while</em>выглядит так:</p>
9
<p>Запись цикла<em>while</em>выглядит так:</p>
10
<p>Этот код выполняется следующим образом:</p>
10
<p>Этот код выполняется следующим образом:</p>
11
<ul><li>Программа проверяет, верно ли утверждение.</li>
11
<ul><li>Программа проверяет, верно ли утверждение.</li>
12
<li>Выполняются инструкции в теле цикла.</li>
12
<li>Выполняются инструкции в теле цикла.</li>
13
<li>Программа возвращается к пункту 1.</li>
13
<li>Программа возвращается к пункту 1.</li>
14
</ul><p>То есть пока утверждение верно<em>(i < 100),</em>цикл будет повторять одни и те же действия. Цикл, который пять раз выводит сообщение "Hello, World!":</p>
14
</ul><p>То есть пока утверждение верно<em>(i < 100),</em>цикл будет повторять одни и те же действия. Цикл, который пять раз выводит сообщение "Hello, World!":</p>
15
int i = 0; while(i < 5) { std::cout << "Hello, World! \n"; i++; }<p>Посмотрим на вывод:</p>
15
int i = 0; while(i < 5) { std::cout << "Hello, World! \n"; i++; }<p>Посмотрим на вывод:</p>
16
<p>Обратите внимание на переменную<em>i -</em>она играет роль счётчика, к которому в каждом шаге цикла прибавляется единица. Это нужно, чтобы инструкции выполнялись только определённое количество раз.</p>
16
<p>Обратите внимание на переменную<em>i -</em>она играет роль счётчика, к которому в каждом шаге цикла прибавляется единица. Это нужно, чтобы инструкции выполнялись только определённое количество раз.</p>
17
<p>Один шаг цикла называется<strong>итерацией,</strong>а счётчик -<strong>итератором.</strong>Поэтому чаще всего для счётчика создаётся переменная<em>i</em>.</p>
17
<p>Один шаг цикла называется<strong>итерацией,</strong>а счётчик -<strong>итератором.</strong>Поэтому чаще всего для счётчика создаётся переменная<em>i</em>.</p>
18
<p>Важно! Следите за тем, чтобы выход из цикла был возможен, иначе он будет выполняться бесконечно.</p>
18
<p>Важно! Следите за тем, чтобы выход из цикла был возможен, иначе он будет выполняться бесконечно.</p>
19
<p>Если внутри цикла складываются числа или что-то выводится, то нагрузка будет минимальной. Если же это какие-то ресурсозатратные вычисления, то выполнение такого цикла может заставить компьютер зависнуть.</p>
19
<p>Если внутри цикла складываются числа или что-то выводится, то нагрузка будет минимальной. Если же это какие-то ресурсозатратные вычисления, то выполнение такого цикла может заставить компьютер зависнуть.</p>
20
<p>Когда нам нужно вмешаться в работу цикла, мы используем операторы<em>break</em>и <em>continue</em>.</p>
20
<p>Когда нам нужно вмешаться в работу цикла, мы используем операторы<em>break</em>и <em>continue</em>.</p>
21
<p>Оператор<em>break</em>прерывает выполнение цикла:</p>
21
<p>Оператор<em>break</em>прерывает выполнение цикла:</p>
22
int sum = 0; int maxSum = 50; int i = 0; while(i < 100) { sum += i; i++; if(sum >= maxSum) { break; } } std::cout << "i = " << i << "\nsum = " << sum << "\n";<p>Этот цикл должен посчитать сумму всех чисел от одного до ста. Но мы указали максимальное значение для переменной<em>sum</em>, поэтому цикл прервётся, как только<em>sum</em>станет больше<em>maxSum</em>.</p>
22
int sum = 0; int maxSum = 50; int i = 0; while(i < 100) { sum += i; i++; if(sum >= maxSum) { break; } } std::cout << "i = " << i << "\nsum = " << sum << "\n";<p>Этот цикл должен посчитать сумму всех чисел от одного до ста. Но мы указали максимальное значение для переменной<em>sum</em>, поэтому цикл прервётся, как только<em>sum</em>станет больше<em>maxSum</em>.</p>
23
<p>Компилятор умеет отличать оператор<em>break</em>в конструкции<em>switch</em>от оператора<em>break</em>, который прерывает циклы. Поэтому можно спокойно писать вот такой код:</p>
23
<p>Компилятор умеет отличать оператор<em>break</em>в конструкции<em>switch</em>от оператора<em>break</em>, который прерывает циклы. Поэтому можно спокойно писать вот такой код:</p>
24
int action = 0; bool end = false; //Этот цикл будет бесконечным, если его не прервать изнутри while(true) { std::cout << "Exit? \n1 - Yes\n0 - No\nAction: "; std::cin >> action; switch(action) { case 1: std::cout << "Good bye!\n"; end = true; break; case 0: std::cout << "Try again!\n"; } if(end) { break; } }<p>Вот как это будет работать:</p>
24
int action = 0; bool end = false; //Этот цикл будет бесконечным, если его не прервать изнутри while(true) { std::cout << "Exit? \n1 - Yes\n0 - No\nAction: "; std::cin >> action; switch(action) { case 1: std::cout << "Good bye!\n"; end = true; break; case 0: std::cout << "Try again!\n"; } if(end) { break; } }<p>Вот как это будет работать:</p>
25
<p>Важно! Оператор break внутри конструкции switch не может прервать цикл.</p>
25
<p>Важно! Оператор break внутри конструкции switch не может прервать цикл.</p>
26
<p>Иногда нам нужно пропустить одну итерацию и перейти к следующей. Для этого используем оператор<em>continue</em>.</p>
26
<p>Иногда нам нужно пропустить одну итерацию и перейти к следующей. Для этого используем оператор<em>continue</em>.</p>
27
int i = 0; while(i < 100) { i++; // if(i % 3 == 0) { continue; } std::cout << " " << i; } std::cout << "\n";<p>Этот цикл выведет все числа от одного до ста, кроме тех, которые делятся на три без остатка.</p>
27
int i = 0; while(i < 100) { i++; // if(i % 3 == 0) { continue; } std::cout << " " << i; } std::cout << "\n";<p>Этот цикл выведет все числа от одного до ста, кроме тех, которые делятся на три без остатка.</p>
28
<p>Цикл<em>do-while</em>похож на <em>while</em>, но он сначала выполняет одну итерацию и только потом проверяет верность утверждения:</p>
28
<p>Цикл<em>do-while</em>похож на <em>while</em>, но он сначала выполняет одну итерацию и только потом проверяет верность утверждения:</p>
29
while(false) { //Ничего не выводится std::cout << "Hello! \n"; } do { //Надпись будет выведена один раз std::cout << "Bye! \n"; } while(false);<p>Вот результат:</p>
29
while(false) { //Ничего не выводится std::cout << "Hello! \n"; } do { //Надпись будет выведена один раз std::cout << "Bye! \n"; } while(false);<p>Вот результат:</p>
30
<p>Если для работы цикла нужен счётчик, то его запись можно сократить с помощью цикла<em>for,</em>записав логику в скобки:</p>
30
<p>Если для работы цикла нужен счётчик, то его запись можно сократить с помощью цикла<em>for,</em>записав логику в скобки:</p>
31
<p>Вот пример такого цикла:</p>
31
<p>Вот пример такого цикла:</p>
32
int sum = 0; for(int i = 0; i < 200; i++) { sum += i; } std::cout << "sum = " << sum << "\n";<p>В результате мы получим сумму всех чисел от 1 до 200:</p>
32
int sum = 0; for(int i = 0; i < 200; i++) { sum += i; } std::cout << "sum = " << sum << "\n";<p>В результате мы получим сумму всех чисел от 1 до 200:</p>
33
<p>Циклы, как и другие конструкции, можно размещать внутри других циклов. Вот, например, как вывести сетку с помощью<em>for</em>:</p>
33
<p>Циклы, как и другие конструкции, можно размещать внутри других циклов. Вот, например, как вывести сетку с помощью<em>for</em>:</p>
34
for(int i = 0; i < 10; i++) { //Обратите внимание, что во вложенном цикле должен использоваться другой итератор. В данном случае j вместо i for(int j = 0; j < 10; j++) { std::cout << " + "; } std::cout << "\n"; }<p>Получаем результат:</p>
34
for(int i = 0; i < 10; i++) { //Обратите внимание, что во вложенном цикле должен использоваться другой итератор. В данном случае j вместо i for(int j = 0; j < 10; j++) { std::cout << " + "; } std::cout << "\n"; }<p>Получаем результат:</p>
35
<p>Важно! Операторы break и continue влияют на тот цикл, в котором они находятся, а не на родительский.</p>
35
<p>Важно! Операторы break и continue влияют на тот цикл, в котором они находятся, а не на родительский.</p>
36
<p>Циклы - одни из самых часто используемых конструкций в программировании. Они нужны при чтении данных из файлов, сортировке, отрисовке графики и так далее. Одно из самых полезных применений циклов связано с массивами, о работе с которыми будет<a>отдельная</a>статья.</p>
36
<p>Циклы - одни из самых часто используемых конструкций в программировании. Они нужны при чтении данных из файлов, сортировке, отрисовке графики и так далее. Одно из самых полезных применений циклов связано с массивами, о работе с которыми будет<a>отдельная</a>статья.</p>
37
<a>Курс с трудоустройством: "Профессия Разработчик С++
с нуля + ИИ" Узнать о курсе</a>
37
<a>Курс с трудоустройством: "Профессия Разработчик С++
с нуля + ИИ" Узнать о курсе</a>