8.4 Перегрузки, шаблоны и пространства имён

8.4.1 Ограничитель для двух типов

Условие

В пространстве имён control реализуйте две перегрузки функции clamp_value: одну с тремя аргументами и результатом типа int, другую — типа double. Функция возвращает нижнюю границу, если значение меньше неё, верхнюю — если оно больше неё, иначе само значение. Границы включительны и заданы в правильном порядке.

Обработайте запросы INT value lower upper и DOUBLE value lower upper, выбирая нужную перегрузку по типу прочитанных переменных. В main вызывайте функции через полное имя control::clamp_value. Готовые функции ограничения значений не допускаются.

Ограничения

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

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

В первой строке вводится Q. Следующие Q строк содержат запросы. Ограничения: 1 ≤ Q ≤ 1000, все числовые аргументы находятся в диапазоне от −10000 до 10000, lower ≤ upper. Для INT аргументы целые; для DOUBLE — вещественные с не более чем двумя знаками после десятичной точки.

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

Для каждого запроса выведите ограниченное значение с новой строки. Для INT — целое число, для DOUBLE — число с шестью знаками после десятичной точки.

Примеры

Вход 1
3
INT -1 0 10
DOUBLE 12.5 0 10
INT 5 0 10
Ожидаемый выход
0
10.000000
5
Вход 2
2
DOUBLE -2 -2 -2
INT 100 7 7
Ожидаемый выход
-2.000000
7
Вход 3
2
INT -10 -20 -5
DOUBLE 1.25 0.5 2.5
Ожидаемый выход
-10
1.250000

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

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

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

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

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

Все попытки

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

Редактор

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