Матч
299, Масштаб температуры (TemperatureScales)
Дивизион 2, Уровень
1
В задаче требуется перевести
значение температуры из одной шкалы в другую. Известно, что шкалы находятся в
линейном соотношении. То есть если t1 и t2 – одна и та же температура в разных шкалах, то существуют
такие действительные числа a и b, что t1 = a * t2 + b.
Известны точка замерзания f1 и точка кипения воды b1 первой шкалы, а также точка замерзания f2 и точка кипения b2 второй шкалы. Необходимо перевести значение температуры t из первой шкалы во вторую.
Класс: TemperatureScales
Метод: double convert(int
f1, int b1, int f2, int b2, int t)
Ограничения: -1000 £ f1, b1, f2, t £ 1000, f1 < b1, f2 < b2.
Вход. Пять целых чисел f1, b1, f2, b2, t.
Выход. Температура t, переведенная из первой шкалы во вторую.
Пример входа
f1 |
f2 |
b1 |
b2 |
t |
0 |
100 |
0 |
100 |
28 |
0 |
100 |
1 |
101 |
28 |
17 |
98 |
-123 |
12 |
22 |
Пример выхода
28.0
29.0
-114.66666666666667
РЕШЕНИЕ
математика
Сместим точку замерзания обоих
шкал в нуль. Интервалы шкал от точки замерзания до кипения станут равными [0; b1 – f1] и [0; b2 – f2]. Если t1 – температура в первой смещенной
шкале (t1 = t – f1), то во второй шкале ей будет соответствовать
температура t2 = (b2 – f2) / (b1 – f1) * t1. Остается сместить полученную
температуру t2 на f2. Получим значение температуры t, переведенное во вторую шкалу. Оно
равно (b2 – f2) / (b1 – f1) * (t – f1) + f2.
ПРОГРАММА
#include <stdio.h>
class TemperatureScales
{
public:
double convert(int
f1, int b1, int
f2, int b2, int
t)
{
return ((double)t-f1)*(b2-f2)
/ (b1-f1) + f2;
}
};