Подсчёт
Второй шаблон — подсчёт: сколько чисел удовлетворяют условию? Он похож на суммирование, но вместо значения вы прибавляете 1, и только когда так решает if.
Каждый седьмой посетитель музея получает бесплатную открытку. Сколько открыток раздаст музей, если придёт 50 посетителей?
int postcards = 0;
for (int visitor = 1; visitor <= 50; visitor++) {
if (visitor % 7 == 0) {
postcards++;
}
}
printf("Открыток: %d\n", postcards);Открыток: 7Счётчик postcards начинается с 0, перед циклом. Цикл проходит по каждому посетителю, а if решает, считать ли его: visitor % 7 == 0 истинно, когда остаток от деления на 7 равен 0. postcards++ выполняется только для посетителей 7, 14, 21, 28, 35, 42 и 49, поэтому в конце счётчик равен 7. Результат вы снова выводите после цикла.
Обратите внимание на две пары фигурных скобок: postcards++ стоит в блоке if, который стоит в блоке цикла. Если postcards++ окажется вне if (но всё ещё в цикле), программа посчитает каждого посетителя и выведет Открыток: 50.
Один цикл может считать и несколько вещей сразу, каждую в своём счётчике. С if и else каждый посетитель считается ровно один раз, в одном счётчике или в другом:
int postcards = 0;
int without = 0;
for (int visitor = 1; visitor <= 50; visitor++) {
if (visitor % 7 == 0) {
postcards++;
} else {
without++;
}
}
printf("Открыток: %d\n", postcards);
printf("Без открытки: %d\n", without);Открыток: 7
Без открытки: 437 + 43 будет 50, по одному на каждого посетителя. Сложить счётчики — быстрый способ проверить, что вы посчитали правильно.
Задание
- 1
На улице стоят дома с номерами от 1 до
HOUSES. Дома с нечётными номерами находятся на левой стороне улицы, с чётными — на правой. Посчитайте дома на левой стороне: создайте переменнуюleftсо значением0, переберите числа от 1 доHOUSESцикломforи для каждого нечётного числа увеличивайтеleftна 1. Число нечётное, когда остаток от деления на 2 равен 1. После цикла выведите результат в видеЛевая сторона: 13. - 2
В том же цикле посчитайте дома на правой стороне: перед циклом создайте переменную
rightсо значением0и увеличивайте её в веткеelse. После цикла выведите на следующей строкеПравая сторона: 12.