Иван обнови решението на 16.10.2016 10:54 (преди около 8 години)
+MELTING_POINT = {
+ 'water' => 0,
+ 'ethanol' => -114,
+ 'gold' => 1064,
+ 'silver' => 961.8,
+ 'copper' => 1085
+}
+
+BOILING_POINT = {
+ 'water' => 100,
+ 'ethanol' => 78.37,
+ 'gold' => 2700,
+ 'silver' => 2162,
+ 'copper' => 2567
+}
+
+def convert_between_temperature_units(degree, initial_unit, target_unit)
+ case initial_unit
+ when 'C'
+ convert_from_c(degree, target_unit)
+ when 'K'
+ convert_from_k(degree, target_unit)
+ when 'F'
+ convert_from_f(degree, target_unit)
+ end
+end
+
+def melting_point_of_substance(substance, unit)
+ convert_between_temperature_units(MELTING_POINT[substance], 'C', unit)
+end
+
+def boiling_point_of_substance(substance, unit)
+ convert_between_temperature_units(BOILING_POINT[substance], 'C', unit)
+end
+
+def convert_from_c(degree, target_unit)
+ if target_unit == 'K'
+ degree + 273.15
+ elsif target_unit == 'F'
+ (degree * 9.0 / 5.0) + 32
+ else
+ degree
+ end
Погледни case
+end
+
+def convert_from_k(degree, target_unit)
+ if target_unit == 'K'
+ degree
+ elsif target_unit == 'F'
+ (degree - 273.15) * 9.0 / 5.0 + 32
+ else
+ degree - 273.15
+ end
+end
Погледни case
+
+def convert_from_f(degree, target_unit)
+ if target_unit == 'K'
+ (degree - 32) * 5.0 / 9.0 + 273.15
+ elsif target_unit == 'F'
+ degree
+ else
+ (degree - 32) * 5.0 / 9.0
+ end
+end
Погледни case
По-добра практика ли е със case да се извършват такива проверки? Ще опитам да го оправя до края на деня, ако намеря време:)
Погледни
case
Погледни
case
Погледни
case