0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Тело цикла, как и тело функции - это место выполнения инструкций. Значит, мы можем использовать внутри него все изученное ранее, например - условные конструкции.</p>
1
<p>Тело цикла, как и тело функции - это место выполнения инструкций. Значит, мы можем использовать внутри него все изученное ранее, например - условные конструкции.</p>
2
<p>Представьте себе функцию, которая считает, сколько раз входит буква в предложение. Пример ее работы:</p>
2
<p>Представьте себе функцию, которая считает, сколько раз входит буква в предложение. Пример ее работы:</p>
3
<p>Перед тем как посмотреть ее содержимое, попробуйте ответить на вопросы:</p>
3
<p>Перед тем как посмотреть ее содержимое, попробуйте ответить на вопросы:</p>
4
<ul><li>Является ли эта операция агрегацией?</li>
4
<ul><li>Является ли эта операция агрегацией?</li>
5
<li>Какой будет проверка на вхождение символа?</li>
5
<li>Какой будет проверка на вхождение символа?</li>
6
</ul><p>Эта задача является агрегирующей. Несмотря на то, что она считает не все символы, для подсчета самой суммы все равно приходится анализировать каждый символ.</p>
6
</ul><p>Эта задача является агрегирующей. Несмотря на то, что она считает не все символы, для подсчета самой суммы все равно приходится анализировать каждый символ.</p>
7
<p>Ключевое отличие этого цикла от рассмотренных - в наличии условия внутри тела. Переменная count увеличивается только в том случае, когда текущий рассматриваемый символ совпадает с ожидаемым.</p>
7
<p>Ключевое отличие этого цикла от рассмотренных - в наличии условия внутри тела. Переменная count увеличивается только в том случае, когда текущий рассматриваемый символ совпадает с ожидаемым.</p>
8
<p>В остальном - это типичная агрегатная функция, которая возвращает количество нужных символов вызывающему коду.</p>
8
<p>В остальном - это типичная агрегатная функция, которая возвращает количество нужных символов вызывающему коду.</p>
9
<h2>Возврат из циклов</h2>
9
<h2>Возврат из циклов</h2>
10
<p>Работа с циклами обычно сводится к двум сценариям:</p>
10
<p>Работа с циклами обычно сводится к двум сценариям:</p>
11
<ol><li>Агрегация. Накопление результата во время итераций и работа с ним после цикла. Переворот строки как раз относится к такому варианту.</li>
11
<ol><li>Агрегация. Накопление результата во время итераций и работа с ним после цикла. Переворот строки как раз относится к такому варианту.</li>
12
<li>Выполнение цикла до достижения необходимого результата и выход. Например, задача поиска простых чисел. Напомним, что простое число - это число, которое делится без остатка только на себя и на единицу.</li>
12
<li>Выполнение цикла до достижения необходимого результата и выход. Например, задача поиска простых чисел. Напомним, что простое число - это число, которое делится без остатка только на себя и на единицу.</li>
13
</ol><p>Рассмотрим простой алгоритм проверки простоты числа. Будем делить искомое число x на все числа из диапазона от двух до x - 1 и смотреть остаток от деления. Если в этом диапазоне не найден делитель, который делит число x без остатка, значит, перед нами простое число.</p>
13
</ol><p>Рассмотрим простой алгоритм проверки простоты числа. Будем делить искомое число x на все числа из диапазона от двух до x - 1 и смотреть остаток от деления. Если в этом диапазоне не найден делитель, который делит число x без остатка, значит, перед нами простое число.</p>
14
<p>Если задуматься, то можно заметить, что достаточно проверять числа не до x - 1, а до половины числа. Например, 11 не делится на 2, 3, 4, 5. Но и дальше гарантированно не будет делиться на числа больше своей половины. Значит, можно провести небольшую оптимизацию и проверять деление только до x / 2.</p>
14
<p>Если задуматься, то можно заметить, что достаточно проверять числа не до x - 1, а до половины числа. Например, 11 не делится на 2, 3, 4, 5. Но и дальше гарантированно не будет делиться на числа больше своей половины. Значит, можно провести небольшую оптимизацию и проверять деление только до x / 2.</p>
15
<p>Алгоритм построен таким образом, что если во время последовательного деления на числа до x / 2 находится хоть одно, которое делит без остатка, то переданный аргумент - не простое число, а значит, дальнейшие вычисления не имеют смысла. В этом месте стоит возврат false.</p>
15
<p>Алгоритм построен таким образом, что если во время последовательного деления на числа до x / 2 находится хоть одно, которое делит без остатка, то переданный аргумент - не простое число, а значит, дальнейшие вычисления не имеют смысла. В этом месте стоит возврат false.</p>
16
<p>И только если цикл отработал целиком, можно сделать вывод, что число - простое, так как не было найдено ни одного числа, которое делит число без остатка.</p>
16
<p>И только если цикл отработал целиком, можно сделать вывод, что число - простое, так как не было найдено ни одного числа, которое делит число без остатка.</p>