2.3 Структуры

2.3.4 Статистика датчика

Условие

Дан набор из N измерений датчика. Каждое измерение содержит время в секундах от начала наблюдения и температуру в десятых долях градуса Цельсия. Температура считается допустимой, если её значение находится в диапазоне от 0 до 500 включительно. Остальные измерения исключаются из расчётов.

Найдите количество допустимых измерений, минимальную и максимальную температуру и среднюю температуру среди допустимых измерений. Время измерения необходимо сохранить вместе с температурой, но в этой задаче оно не влияет на расчёты и не выводится.

Объявите структуру struct Measurement с целочисленными полями time_s и raw_temperature. Сохраните измерения в массиве структур. Объявите структуру struct Statistics с целочисленными полями valid_count, min_raw, max_raw и полем average_c типа double.

Реализуйте функцию struct Statistics analyse_measurements(const struct Measurement measurements[], int count), которая возвращает статистику, не изменяет массив и не выполняет ввод или вывод. В полях min_raw и max_raw храните температуру в десятых долях градуса, в average_c — среднюю температуру в градусах Цельсия. Если допустимых измерений нет, все поля результата должны быть равны нулю; признаком отсутствия данных служит valid_count == 0.

В функции main прочитайте данные, вызовите функцию и выведите результат. При вычислении среднего каждое допустимое измерение учитывается один раз; усреднять по длительности между измерениями не требуется.

Ограничения

Время: 2 секунды. Память: 64 МиБ. Вывод: до 2 МиБ. Стандарты: C11 / C++17.

Входные данные

В первой строке вводится целое число N — количество измерений. В следующих N строках вводятся по два целых числа time_s и raw_temperature. Ограничения: 1 ≤ N ≤ 1000, 0 ≤ time_s ≤ 10⁹, −1000 ≤ raw_temperature ≤ 1000. Времена измерений заданы в порядке неубывания и могут повторяться.

Выходные данные

Если допустимых измерений нет, выведите строку NO DATA.

Иначе выведите в одной строке через пробел четыре значения: количество допустимых измерений, минимальную температуру, максимальную температуру и среднюю температуру. Все три температуры выведите в градусах Цельсия с шестью знаками после десятичной точки.

Примеры

Вход 1
5
0 240
1 250
2 260
3 -1
4 280
Ожидаемый выход
4 24.000000 28.000000 25.750000
Вход 2
2
0 -1
1 501
Ожидаемый выход
NO DATA
Вход 3
2
0 0
0 500
Ожидаемый выход
2 0.000000 50.000000 25.000000

Пробный запуск

Код берётся из редактора. Запуск не создаёт посылку и не влияет на баллы.

Выберите пример или введите свои данные и нажмите «Запустить».

Текущая попытка

Отправьте решение. Этапы и результат появятся здесь автоматически.

Все попытки

Войдите, чтобы видеть свои попытки.

Редактор

Один файл до 64 КиБ · Tab / Shift+Tab — отступ · Esc — выход из редактора · черновик сохраняется для этого аккаунта, задачи и языка.