Существует множество задач компьютерного программирования, требующих выполнения набора действий определенное количество раз. Например, программа средней оценки для пяти учащихся должна пять раз предлагать пользователю ввести оценку, чтобы определить среднюю оценку для класса. Существует шаблон программы, который обрабатывает эту ситуацию: сделать что-то определенное количество раз.

Этот шаблон обычно использует оператор for в своей реализации, поэтому мы начнем с него, прежде чем перейдем к самому шаблону.

Заявление for

Оператор for используется для итерации, когда вы заранее знаете, сколько итераций требуется вашей программе. Вот шаблон синтаксиса для оператора for (lcv — переменная управления циклом):

for (тип данных lcv = значение; условие, изменение-lcv) {
оператор(ы);

В большинстве случаев lcv будет целым числом, поскольку мы используем переменную для подсчета количества итераций. Вот пример, который отображает целые числа от 1 до 10:

for (int i = 1; i <= 10; i++) {
  cout << i << endl;
}

Можно перенести инициализацию lcv за пределы оператора for, как в этом фрагменте кода:

int i = 1;
for (; i <= 10; i++) {
  cout << i << endl;
}

Но когда вы делаете это, вы теряете преимущество области видимости на уровне блоков, которое является частью оператора for. Практически при каждом использовании оператора for lcv должен быть инициализирован внутри оператора, чтобы lcv вышел из области действия после завершения оператора.

Вы также можете переместить оператор модификации в тело оператора, но на самом деле нет причин делать это.

Шаблон программы «Делай что-нибудь определенное количество раз»

Вот простой псевдокод для этого шаблона:

Выполните следующие действия заданное количество раз:
Выполните какое-либо действие

Имея в виду этот псевдокод, вот программа, которая предлагает пользователю ввести 5 тестовых баллов, а затем отображает среднее значение баллов:

int main()
{
    int grade, total = 0;
    const int NUM_GRADES = 5;
    for (int i = 1; i <= NUM_GRADES; i++) {
      cout << "Enter a grade: ";
      cin >> grade;
      total += grade;
    }
    double average = static_cast<double>(total) / NUM_GRADES;
    cout << "The average grade is: " << average << endl;
}

Результат одного запуска этой программы:

Введите оценку: 61
Введите оценку: 71
Введите оценку: 81
Введите оценку: 91
Введите оценку: 100
Средняя оценка: 80,8

В следующем примере программа предлагает пользователю ввести 3 температуры по Цельсию, преобразует температуру в градусы Фаренгейта и отображает обе температуры. Вот код:

int main()
{
    int cel, fahren;
    const int NUM_TEMPS = 3;
    for (int i = 1; i <= NUM_TEMPS; i++) {
     cout << "Enter a Celsius temperature: ";
     cin >> cel;
     fahren = (9.0/5.0) * cel + 32.0;
     cout << cel << " C equals " << fahren << " F" << endl;
    }
}

Вот результат одного запуска этой программы:

Введите температуру по Цельсию: 12
12 C соответствует 53 F
Введите температуру по Цельсию: -9
-9 C соответствует 15 F
Введите температуру по Цельсию: 22
22 С равно 71 Ф

Последние мысли

Оператор for используется, когда вы заранее знаете, сколько итераций цикла требуется вашей программе. Если вы заранее не знаете количество итераций, вместо этого следует использовать оператор while или оператор do while.

Этот шаблон определенно предназначен для оператора for в его реализации. Вы можете использовать оператор while с переменной-счетчиком, но почти все опытные программисты реализовали бы шаблон с оператором for.

Спасибо за чтение и, пожалуйста, ответьте на эту статью или напишите мне с вашими комментариями и предложениями.