Как можно сделать конвертер единиц в задаче с? - PullRequest
2 голосов
/ 29 сентября 2011

Мне было интересно, как в задаче c можно было бы сделать преобразователь единиц, в частности одну конкретную точку: понадобился бы новый блок кода для каждой единицы, которая должна быть преобразована в каждую другую единицу.например,

метры - футы метры - сантиметры метры - дюймы

и т. д., затем есть новый код для преобразования футов в каждую единицу, затем один для дюймов в каждую, другой для сантиметров в каждую единицуи т.д., или есть какой-то более простой способ?

Спасибо

Ответы [ 4 ]

0 голосов
/ 29 сентября 2011

Делайте то же самое, что и Организация Объединенных Наций или Европейский союз для переводов: конвертируйте из любого в ссылку, а затем из ссылки на любой другой.

Для физических единиц удобной ссылкой является международная система единиц .

0 голосов
/ 29 сентября 2011

Существует действительно более простой способ - хранить свои единицы измерения и правила преобразования в файле или базе данных. В большинстве случаев вам нужна более или менее простая арифметика для преобразования единиц. В Unix или Linux есть программа «unit», вы можете изучить исходный код и unittab или unit.tab.

0 голосов
/ 29 сентября 2011

Как правило, все единицы измерения имеют одинаковую форму:

valueInUnit1 = A * valueInUnit2 + B

B часто даже равное нулю (метры в футы, дюймы в метры и т. Д.) И ненулевое значение только в некоторых случаях (например, при преобразовании температуры из Кельвинов в градусы Цельсия)

Вам нужно только вести список значений A и B для каждой пары единиц, чтобы преобразовать одну единицу в другую.

Обратите внимание, что вы можете даже сохранить только основные значения (например, от единиц метрической системы до других единиц) и вывести другие, так как из приведенной выше формулы вы, очевидно, можете сделать обратное

valueInUnit2 = (valueInUnit1 - B) / A = (1/A) * valueInUnit1 + (-B/A)

Таким образом, если у вас есть список значений A и B для каждой пары единиц, из которых вы хотите преобразовать единицы, у вас будет только один метод для их преобразования.

Вы можете хранить список значений A и B, где хотите, в отдельном файле PLIST, в базе данных sqlite3, в CoreData, ... (для вашего случая использование файла PLIST, вероятно, будет гораздо проще. Например, NSDictionary, ключи которого - это имя единицы происхождения, а сами значения - это NSDictionaries, ключи которых являются единицами назначения, а значения - пары A и B ... - это всего лишь предположение, а не единственное решение)

0 голосов
/ 29 сентября 2011

Вы можете использовать таблицу со всеми коэффициентами преобразования и написать метод, который принимает коэффициент преобразования и значение, которое должно быть преобразовано. Поэтому вам нужен только один «блок» кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...