Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Философия программирования на C++ Выпуск 16. Циклы 2 - перебор и завершение


Приветствую всех подписчиков!

Сегодня мы расскажем вам о еще одном виде циклов.

В прошлом выпуске мы прошли два вида: while (...) { ... } и do { ... } while (...); . Какой именно использовать - остается на ваше усмотрение, но лично я не люблю пользоваться вторым видом, поскольку с ним становится сложнее читать код (чтобы узнать как выйти из цикла, по какому условию - приходится листать исходники вниз, а они бывают порой очень громоздкими и запутанными).

А теперь - цикл for. Он необходим, когда нужно перебрать какие-то значения от и до. Пример:

#include <iostream>
using namespace std;
int main() {
    // Сначала просим пользователя ввести число
    int num = 0;
    cout << "Please, enter a number: ";
    cin >> num;
    // А теперь считаем факториал от этого числа!
    int result = 1;
    for (int i = 1; i <= num; i++) {
        result *= i;
    }
    cout << "Factorial: " << result << endl;
}

Эта программа считает факториал от числа - произведение всех целых чисел от 1 до введенного числа (1 * 2 * 3 * ... * N = N! - восклицательный знак - это обозначение факториала в математике).

Здесь использован специальный вид цикла, наиболее удобный для перебора значений от 1 до num. Вот его структура:

for (<инициализация>; <условие>; <счетчик>) {
    <команды>;
}

В инициализации можно объявить переменные, которые будут использоваться внутри этого цикла. Например, мы объявили переменную i и присвоили ей значение 1.  Этот код (инициализации) выполнится ровно один раз перед входом в цикл.

Условие содержит то же самое, что и while. Цикл завершится тогда, когда написанное условие не выполнится. Туда можно написать любое условие, не обязательно связанное с переменной i (однако лучше для сложных условий использовать циклы while - просто так удобнее читать код). Вообще, циклы for больше предназначены для удобства организации кода, поэтому лучше его использовать в основном при переборе значений.

Условия проверяются каждый раз ПЕРЕД входом в тело цикла (то есть тело цикла может не выполниться никогда - как в случае с циклами while(...) {}

Счетчик - это код, который будет выполняться каждый раз ПОСЛЕ тела цикла. Вообще говоря туда можно запихнуть любой код (только без точек с запятой), но обычно там пишут увеличение значения счетчика (так обычно называют переменную i в циклах for). Мы использовали оператор i++ - это увеличение значения переменной i на единицу. Называется оператором инкремента. Его мы рассмотрим подробнее в следующем выпуске. Можно было бы увеличивать значение i на любое число, например i += 10 увеличивало бы его на 10, а i += i увеличивало на само себя (в два раза).

Теперь распишем (почти) то же самое, но через цикл while:

<инициализация>;
while(<условие>) {
    <команды>;
    <счетчик>;
}

Кстати, обычно переменные-счетчики в циклах for называют (исторически так сложилось) переменными i, j, k, l (как правило больше не требуется). И это действительно удобно, особенно когда никакие другие переменные так не называются.

И еще одно - циклы тоже могут быть вложенными друг в друга до бесконечности. То, что пишется внутри скобочек {} может быть любым произвольным кодом.

В следующем выпуске мы рассмотрим подробнее фигурные скобочки {} и оператор инкремента (он не так прост, как кажется!). 

Мы закончили статьи о циклах (хотя некоторые секреты будем раскрывать вам и дальше). Удачного вам дня!

P.S.:

Задание. Для тех, кто не знает как можно попрактиковаться - я буду давать каждый выпуск задания.

Попробуйте написать программу, которая проверяет, является ли введенное пользователем число - простым! (Напомню, простым называется число, которое делится только на себя и на единицу).

Подсказка: вспомните про целочисленное деление - оно отбрасывает остаток. 

Свои решения и вопросы можно присылать вот сюда:

mail: mystic@online-compiler.ru

Жду ваших писем, всем удачи! 


В избранное