HTML Diff
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 &lt; 100),</em>цикл будет повторять одни и те же действия. Цикл, который пять раз выводит сообщение "Hello, World!":</p>
14 </ul><p>То есть пока утверждение верно<em>(i &lt; 100),</em>цикл будет повторять одни и те же действия. Цикл, который пять раз выводит сообщение "Hello, World!":</p>
15 int i = 0; while(i &lt; 5) { std::cout &lt;&lt; "Hello, World! \n"; i++; }<p>Посмотрим на вывод:</p>
15 int i = 0; while(i &lt; 5) { std::cout &lt;&lt; "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 &lt; 100) { sum += i; i++; if(sum &gt;= maxSum) { break; } } std::cout &lt;&lt; "i = " &lt;&lt; i &lt;&lt; "\nsum = " &lt;&lt; sum &lt;&lt; "\n";<p>Этот цикл должен посчитать сумму всех чисел от одного до ста. Но мы указали максимальное значение для переменной<em>sum</em>, поэтому цикл прервётся, как только<em>sum</em>станет больше<em>maxSum</em>.</p>
22 int sum = 0; int maxSum = 50; int i = 0; while(i &lt; 100) { sum += i; i++; if(sum &gt;= maxSum) { break; } } std::cout &lt;&lt; "i = " &lt;&lt; i &lt;&lt; "\nsum = " &lt;&lt; sum &lt;&lt; "\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 &lt;&lt; "Exit? \n1 - Yes\n0 - No\nAction: "; std::cin &gt;&gt; action; switch(action) { case 1: std::cout &lt;&lt; "Good bye!\n"; end = true; break; case 0: std::cout &lt;&lt; "Try again!\n"; } if(end) { break; } }<p>Вот как это будет работать:</p>
24 int action = 0; bool end = false; //Этот цикл будет бесконечным, если его не прервать изнутри while(true) { std::cout &lt;&lt; "Exit? \n1 - Yes\n0 - No\nAction: "; std::cin &gt;&gt; action; switch(action) { case 1: std::cout &lt;&lt; "Good bye!\n"; end = true; break; case 0: std::cout &lt;&lt; "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 &lt; 100) { i++; // if(i % 3 == 0) { continue; } std::cout &lt;&lt; " " &lt;&lt; i; } std::cout &lt;&lt; "\n";<p>Этот цикл выведет все числа от одного до ста, кроме тех, которые делятся на три без остатка.</p>
27 int i = 0; while(i &lt; 100) { i++; // if(i % 3 == 0) { continue; } std::cout &lt;&lt; " " &lt;&lt; i; } std::cout &lt;&lt; "\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 &lt;&lt; "Hello! \n"; } do { //Надпись будет выведена один раз std::cout &lt;&lt; "Bye! \n"; } while(false);<p>Вот результат:</p>
29 while(false) { //Ничего не выводится std::cout &lt;&lt; "Hello! \n"; } do { //Надпись будет выведена один раз std::cout &lt;&lt; "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 &lt; 200; i++) { sum += i; } std::cout &lt;&lt; "sum = " &lt;&lt; sum &lt;&lt; "\n";<p>В результате мы получим сумму всех чисел от 1 до 200:</p>
32 int sum = 0; for(int i = 0; i &lt; 200; i++) { sum += i; } std::cout &lt;&lt; "sum = " &lt;&lt; sum &lt;&lt; "\n";<p>В результате мы получим сумму всех чисел от 1 до 200:</p>
33 <p>Циклы, как и другие конструкции, можно размещать внутри других циклов. Вот, например, как вывести сетку с помощью<em>for</em>:</p>
33 <p>Циклы, как и другие конструкции, можно размещать внутри других циклов. Вот, например, как вывести сетку с помощью<em>for</em>:</p>
34 for(int i = 0; i &lt; 10; i++) { //Обратите внимание, что во вложенном цикле должен использоваться другой итератор. В данном случае j вместо i for(int j = 0; j &lt; 10; j++) { std::cout &lt;&lt; " + "; } std::cout &lt;&lt; "\n"; }<p>Получаем результат:</p>
34 for(int i = 0; i &lt; 10; i++) { //Обратите внимание, что во вложенном цикле должен использоваться другой итератор. В данном случае j вместо i for(int j = 0; j &lt; 10; j++) { std::cout &lt;&lt; " + "; } std::cout &lt;&lt; "\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>