Матч 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 = tf1), то во второй шкале ей будет соответствовать температура 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;

  }

};