×
Traktatov.net » Язык программирования C++. Пятое издание » Читать онлайн
Страница 16 из 714 Настройки
" (edit-compile-debug).

Упражнения раздела 1.4.3

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

1.4.4. Оператор >if

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

>#include

>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;

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

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

>}

Условие в этом операторе >if использует для проверки равенства значений переменных