Выбрать главу
Упражнения раздела 1.4.3

Упражнение 1.16. Напишите собственную версию программы, которая выводит сумму набора целых чисел, прочитанных при помощи объекта cin.

1.4.4. Оператор if

Подобно большинству языков, С++ предоставляет оператор if, который обеспечивает выполнение операторов по условию. Оператор if можно использовать для написания программы подсчета количества последовательных совпадений значений во вводе:

#include <iostream>

int main() {

 // currVal - подсчитываемое число; новые значения будем читать в val

 int currVal = 0, val = 0;

 // прочитать первое число и удостовериться в наличии данных

 // для обработки

 if (std::cin >> currVal) {

  int cnt = 1; // сохранить счет для текущего значения

  while (std::cin >> val) { // читать остальные числа

   if (val == currVal)      // если значение то же

    ++cnt;                  // добавить 1 к cnt

   else {                   // в противном случае вывести счет для

                            // предыдущего значения

    std::cout << currVal << " occurs "

              << ent << " times" << std::endl;

    currVal = val;          // запомнить новое значение

    cnt = 1;                // сбросить счетчик

   }

  } // цикл while заканчивается здесь

  // не забыть вывести счет для последнего значения

  std::cout << currVal << " occurs "

            << cnt << " times" << std::endl;

 } // первый оператор if заканчивается здесь

 return 0;

}

Если задать этой программе следующий ввод:

42 42 42 42 42 55 55 62 100 100 100

то результат будет таким:

42 occurs 5 times

55 occurs 2 times

62 occurs 1 times

100 occurs 3 times

Большая часть кода в этой программе должна быть уже знакома по прежним программам. Сначала определяются переменные val и currVal: currVal будет содержать подсчитываемое число, а переменная val — каждое число, читаемое из ввода. Новыми являются два оператора if. Первый гарантирует, что ввод не пуст.

if (std::cin >> currVal) {

 // ...

} // первый оператор if заканчивается здесь

Подобно оператору while, оператор if проверяет условие. Условие в первом операторе if читает значение в переменную currVal. Если чтение успешно, то условие истинно и выполняется блок кода, начинающийся с открытой фигурной скобки после условия. Этот блок завершается закрывающей фигурной скобкой непосредственно перед оператором return.

Как только подсчитываемое стало известно, определяется переменная cnt, содержащая счет совпадений данного числа. Для многократного чтения чисел со стандартного устройства ввода используется цикл while, подобный приведенному в предыдущем разделе.

Телом цикла while является блок, содержащий второй оператор if:

if (val == currVal) // если значение то же

 ++cnt;             // добавить 1 к cnt

else {              // в противном случае вывести счет для

                    // предыдущего значения

 std::cout << currVal << " occurs "

           << cnt << " times" << std::endl;