Момчил обнови решението на 16.10.2016 23:50 (преди над 8 години)
+def convert_between_temperature_units(degree, value_in, value_out)
+ case [value_in, value_out]
+ when ['C', 'C']
+ then degree
then
не е задължително да се ползва, когато изразът е на нов ред. Дори е препоръчително да се пропуска в тези случаи. А и нещо друго - няма ли как да избегнеш 3-те случая, в които входната и изходната единица са равни? Някак излишно е да ги ловим поотделно.
+ when ['C', 'K']
+ then degree + 273.15
+ when ['C', 'F']
+ then degree * 1.8 + 32.0
+ when ['K', 'C']
+ then degree - 273.15
+ when ['K', 'K']
+ then degree
+ when ['K', 'F']
+ then degree * 1.8 - 459.67
+ when ['F', 'C']
+ then (degree - 32.0) * 5.0 / 9.0
+ when ['F', 'K']
+ then (degree + 459.67) * 5.0 / 9.0
+ when ['F', 'F']
+ then degree
+ end
+end
+
+def melting_point_of_substance(substance, type_in)
+ case [substance, type_in]
+ when ['water', 'C']
+ then 0
+ when ['water', 'K']
+ then convert_between_temperature_units(0, 'C', 'K')
+ when ['water', 'F']
+ then convert_between_temperature_units(0, 'C', 'F')
+ when ['ethanol', 'C']
+ then -114
+ when ['ethanol', 'K']
+ then convert_between_temperature_units(-114, 'C', 'K')
+ when ['ethanol', 'F']
+ then convert_between_temperature_units(-114, 'C', 'F')
+ when ['gold', 'C']
+ then 1064
+ when ['gold', 'K']
+ then convert_between_temperature_units(1064, 'C', 'K')
+ when ['gold', 'F']
+ then convert_between_temperature_units(1064, 'C', 'F')
+ when ['silver', 'C']
+ then 961.8
+ when ['silver', 'K']
+ then convert_between_temperature_units(961.8, 'C', 'K')
+ when ['silver', 'F']
+ then convert_between_temperature_units(961.8, 'C', 'F')
+ when ['copper', 'C']
+ then 1085
+ when ['copper', 'K']
+ then convert_between_temperature_units(1085, 'C', 'K')
+ when ['copper', 'F']
+ then convert_between_temperature_units(1085, 'C', 'F')
Доста дългичко се е получило. Може да пробваш да си дефинираш температурите в хеш, използвайки за ключове стринговете с имена на веществата. Така ще можеш директно да си достъпиш температурата, ползвайки подадения стринг. Например melting_points['water']
ще работи ако имаш хеша melting_points = { 'water' => 0 }
.
+ end
+end
+
+def boiling_point_of_substance(substance, type_in)
+ case [substance, type_in]
+ when ['water', 'C']
+ then 100
+ when ['water', 'K']
+ then convert_between_temperature_units(100, 'C', 'K')
+ when ['water', 'F']
+ then convert_between_temperature_units(100, 'C', 'F')
+ when ['ethanol', 'C']
+ then 78.37
+ when ['ethanol', 'K']
+ then convert_between_temperature_units(78.37, 'C', 'K')
+ when ['ethanol', 'F']
+ then convert_between_temperature_units(78.37, 'C', 'F')
+ when ['gold', 'C']
+ then 2700
+ when ['gold', 'K']
+ then convert_between_temperature_units(2700, 'C', 'K')
+ when ['gold', 'F']
+ then convert_between_temperature_units(2700, 'C', 'F')
+ when ['silver', 'C']
+ then 2162
+ when ['silver', 'K']
+ then convert_between_temperature_units(2162, 'C', 'K')
+ when ['silver', 'F']
+ then convert_between_temperature_units(2162, 'C', 'F')
+ when ['copper', 'C']
+ then 2567
+ when ['copper', 'K']
+ then convert_between_temperature_units(2567, 'C', 'K')
+ when ['copper', 'F']
+ then convert_between_temperature_units(2567, 'C', 'F')
+ end
+end
+
+puts convert_between_temperature_units(22, 'K', 'F')
Тези помощни печатания на екрана може да ги изтриеш, на нас няма да ни трябват. :)
+puts melting_point_of_substance('gold', 'K')
+puts boiling_point_of_substance('silver', 'C')
then
не е задължително да се ползва, когато изразът е на нов ред. Дори е препоръчително да се пропуска в тези случаи. А и нещо друго - няма ли как да избегнеш 3-те случая, в които входната и изходната единица са равни? Някак излишно е да ги ловим поотделно.Доста дългичко се е получило. Може да пробваш да си дефинираш температурите в хеш, използвайки за ключове стринговете с имена на веществата. Така ще можеш директно да си достъпиш температурата, ползвайки подадения стринг. Например
melting_points['water']
ще работи ако имаш хешаmelting_points = { 'water' => 0 }
.Тези помощни печатания на екрана може да ги изтриеш, на нас няма да ни трябват. :)