Упражнение 1.16. Напишите собственную версию программы, которая выводит сумму набора целых чисел, прочитанных при помощи объекта cin
.
Подобно большинству языков, С++ предоставляет if
, который обеспечивает выполнение операторов по условию. Оператор if
можно использовать для написания программы подсчета количества последовательных совпадений значений во вводе:
#include
int main() {
//
int currVal = 0, val = 0;
//
//
if (std::cin >> currVal) {
int cnt = 1; //
while (std::cin >> val) { //
if (val == currVal) //
++cnt; //
else { //
//
std::cout << currVal << " occurs "
<< ent << " times" << std::endl;
currVal = val; //
cnt = 1; //
}
} //
//
std::cout << currVal << " occurs "
<< cnt << " times" << std::endl;
} //
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) {
// ...
} //
Подобно оператору while
, оператор if
проверяет условие. Условие в первом операторе if
читает значение в переменную currVal
. Если чтение успешно, то условие истинно и выполняется блок кода, начинающийся с открытой фигурной скобки после условия. Этот блок завершается закрывающей фигурной скобкой непосредственно перед оператором return
.
Как только подсчитываемое стало известно, определяется переменная cnt
, содержащая счет совпадений данного числа. Для многократного чтения чисел со стандартного устройства ввода используется цикл while
, подобный приведенному в предыдущем разделе.
Телом цикла while
является блок, содержащий второй оператор if
:
if (val == currVal) //
++cnt; //
else { //
//
std::cout << currVal << " occurs "
<< cnt << " times" << std::endl;
currVal = val; //
cnt = 1; //
}
Условие в этом операторе if
использует для проверки равенства значений переменных val
и currVal
==
). Если условие истинно, выполняется оператор, следующий непосредственно за условием. Этот оператор осуществляет инкремент значения переменной cnt
, означая очередное повторение значения переменной currVal
.