Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Калькулятор единиц измерения в строку 
V
    Опции темы
zzz9
Дата 12.3.2012, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 12.3.2012

Репутация: нет
Всего: нет



Ситуация заключается в том, что на входе есть строка, например: sin ( x + 5 ) + 1.
Задана единица измерения фукнции (результата), например: кельвин.
Задана единица измерения аргумента, например: мм.
Необходимо, чтобы в калькуляторе выражений при заданном значении аргумента при пересчете значения пересчитывались в стандартные единицы измерения, например: цельсий и метр.

Совсем в голову не укладывается, как определять взаимодействие между параметрами операций и единицами измерений?
Может у кого есть соображения? Например, как расценивать 5, как какую единицу измерения? и 1? какая единица измерения будет результатом функции sin? на что смотреть при разборе строки и вычислениях?

Это сообщение отредактировал(а) zzz9 - 12.3.2012, 14:11
PM MAIL   Вверх
Akina
Дата 12.3.2012, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Пересчёты должны выполняться ДО подстановки и ПОСЛЕ получения результата. А константы в формулах ОБЯЗАНЫ быть в системных единицах.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
baldina
Дата 12.3.2012, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата(Akina @  12.3.2012,  14:23 Найти цитируемый пост)
 А константы в формулах ОБЯЗАНЫ быть в системных единицах. 

Цитата(zzz9 @  12.3.2012,  14:11 Найти цитируемый пост)
Задана единица измерения аргумента, например: мм

кажется, это трактует константу как единицу той же размерности, что и аргумент.
да и не очень-то логично в формуле 1+x, где х вводится в мм, считать 1 одним метром. не интуитивно.

опять же, если формула 
y = sin ( x + 5 ) + 1
дает зависимость y в кельвинах от x в мм, то очевидно 1 тоже в кельвинах

с функциями сложнее, тут придется принять допущение. например, что они как раз работают в системных единицах, т.е. должно быть
y = kelvin_to_celsius(celsius_to_kelvin(sin(mm_to_m(x+5)) + 1)

PM MAIL   Вверх
Akina
Дата 12.3.2012, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(baldina @  12.3.2012,  15:50 Найти цитируемый пост)
кажется, это трактует константу как единицу той же размерности, что и аргумент.

Мне так НЕ кажется. Либо формула даётся в системных единицах, либо вся затея изначально лишена смысла. ИМХО.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
baldina
Дата 12.3.2012, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата(Akina @  12.3.2012,  16:15 Найти цитируемый пост)
вся затея изначально лишена смысла

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

Добавлено через 1 минуту и 6 секунд
zzz9, а расскажите нам, откуда берется строка формулы, откуда и когда - размерности
PM MAIL   Вверх
zzz9
Дата 13.3.2012, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 12.3.2012

Репутация: нет
Всего: нет



Спасибо вам за ответы  smile 
Теперь некоторые сомнения развеяны. Я думаю для каждого числа и переменной задавать едницу измерения, заполнять из как мне подсказали во время синтаксического разбора. Во время вычислений обрабатывать их взаимодействие.
Цитата

zzz9, а расскажите нам, откуда берется строка формулы, откуда и когда - размерности

Строку вводит пользователь в диалоге. Перед диалогом заранее устанавливаются единицы измерения функции (результата) и аргументов, о которых сообщается пользователю. Все это используется в программе САПР как параметризация.

Фух, задача упростилась, потому что взаимодействие единиц измерения выражения в произвольной форме, как я понял достаточно сложно. Теперь буду считать все константы в безразмерных величинах, а если пользователь захочет ввести константу, которая бы автоматически переводилась из разных единиц в зависимости от установок и пересчитывалась в системные, то пользователь должен указать в диалоге контанту, например a = 5 и указать ее единицу измерения.

Это сообщение отредактировал(а) zzz9 - 13.3.2012, 08:30
PM MAIL   Вверх
maxim1000
Дата 13.3.2012, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



в принципе, можно упростить интерфейс пользователя, введя константы mm, K, kg, и т.д.

тогда можно будет естественным образом писать 10mm/s*2s+3mm
(под 10mm подразумевается 10*mm)


--------------------
qqq
PM WWW   Вверх
zzz9
Дата 13.3.2012, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 12.3.2012

Репутация: нет
Всего: нет



Цитата

в принципе, можно упростить интерфейс пользователя, введя константы mm, K, kg, и т.д.

тогда можно будет естественным образом писать 10mm/s*2s+3mm
(под 10mm подразумевается 10*mm)

Тоже идея!
Но в моем случае, проблемма не в самих измерениях внутри одной единицы, например: мм, км, см. А как какой тип измерения расценивать константы и результаты фукнций, то есть либо мм, либо цельсий. А единицы мм, км, см зависят от текущих установок.
Но идея хорошая.
PM MAIL   Вверх
baldina
Дата 13.3.2012, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата(zzz9 @  13.3.2012,  07:37 Найти цитируемый пост)
все константы в безразмерных величинах

и как будет интерпретироваться x(mm) + 1?  smile 
1 должна быть в каких-то единицах - текущих, либо системных
PM MAIL   Вверх
ksnk
Дата 13.3.2012, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



zzz9, Можно пытаться "автоматически" приводить константы, если юзер по каким-то причинам постеснялся определить их тип в процессе ввода формулы. Складывать, например, можно только яблоки с яблоками, так что неопределенного типа константа приведется к явно определенному типу левой(правой) части сложения-вычитания. С умножением-делением сложнее, там бывают и "просто константы" и явные типы в процессе операции трансформируются...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
zzz9
Дата 13.3.2012, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 12.3.2012

Репутация: нет
Всего: нет



Цитата

и как будет интерпретироваться x(mm) + 1?   
1 должна быть в каких-то единицах - текущих, либо системных

Вначале все будет переводиться в системные величины, потом добавляться единица. Сложновато просто так проводить анализ и подсчет.
PM MAIL   Вверх
zzz9
Дата 27.3.2012, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 12.3.2012

Репутация: нет
Всего: нет



Появился вопрос по поводу единиц измерения. Подскажите пожалуйста.
Длина, время, некоторые другие единицы измерения конвертируются путем умножения на коэффициент, а температура складывается.
Например, в 0 градусах цельсия - 273,15 градусов кельвина, то есть нужно прибавить, а не умножить, как с метрами и секундами.
Я застопорился на простом примере.

Есть выражение: 
F = t1 + t2, t1 = 1 C, t2 = 2 C.
Нужно перевести это выражение в Кельвины.
Я попробовал перевести, t1 и t2 отдельно в кельвины и получил t1 = 274.15 K, t2 = 275.15 K.
После выполнил сложение F = t1 + t2, то есть F = 549.30 K.
Но потом я попробовал снова перевести полученный результат в цельсии, получил: 276,15 С.
Естесственно, если мы сложим выражение записанное ранее, то получим F = 3 C.

Все это никак не стыкуется, что я делаю не так?  smile 
PM MAIL   Вверх
baldina
Дата 27.3.2012, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



правила сложения правильные:
Код

с = k-273.15 ->
c1+c2+c3 = (k1-273.15) + (k2-273.15) + (k3-273.15) = (k1+k2+k3) + 3*(-273.15)

трактовка неправильна. температура - интенсивная величина и свойством аддитивности не обладает

Добавлено через 9 минут и 53 секунды
zzz9, тут дело даже не в формуле преобразования C->K, Вы можете перейти к Дж, но аддитивное свойство не появится: соединив два тела с температурой T итоговая температура не станет равной 2T. Уместно говорить лишь об изменении температуры (вычитании). Т.е. в реальной жизни, в правильных физических формулах сложение температур не появится.
PM MAIL   Вверх
baldina
Дата 27.3.2012, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



кстати. факт неаддитивности не мешает вычислять, например, среднее значение, что требуется довольно часто:
Код

avg(c1,c2,c3) = (c1+c2+c3)/3 = ((k1-273.15) + (k2-273.15) + (k3-273.15))/3 = ((k1+k2+k3) + 3*(-273.15))/3 = (k1+k2+k3)/3 - 273.15

PM MAIL   Вверх
zzz9
Дата 27.3.2012, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 12.3.2012

Репутация: нет
Всего: нет



baldina, спасибо большое.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0578 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.