![]() |
|
|
![]()
|
|
| zzz9 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 12.3.2012 Репутация: нет Всего: нет |
Ситуация заключается в том, что на входе есть строка, например: sin ( x + 5 ) + 1.
Задана единица измерения фукнции (результата), например: кельвин. Задана единица измерения аргумента, например: мм. Необходимо, чтобы в калькуляторе выражений при заданном значении аргумента при пересчете значения пересчитывались в стандартные единицы измерения, например: цельсий и метр. Совсем в голову не укладывается, как определять взаимодействие между параметрами операций и единицами измерений? Может у кого есть соображения? Например, как расценивать 5, как какую единицу измерения? и 1? какая единица измерения будет результатом функции sin? на что смотреть при разборе строки и вычислениях? Это сообщение отредактировал(а) zzz9 - 12.3.2012, 14:11 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Пересчёты должны выполняться ДО подстановки и ПОСЛЕ получения результата. А константы в формулах ОБЯЗАНЫ быть в системных единицах.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
кажется, это трактует константу как единицу той же размерности, что и аргумент. да и не очень-то логично в формуле 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) |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Мне так НЕ кажется. Либо формула даётся в системных единицах, либо вся затея изначально лишена смысла. ИМХО. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
как она изложена - согласен. впечатление, что формулу вводит пользователь, зависимо устанавливая желаемые единицы. возможно впечатление ошибочно) а если формулы и размерности независимы, то согласен с Вами, внутри системные, преобразование до и после Добавлено через 1 минуту и 6 секунд zzz9, а расскажите нам, откуда берется строка формулы, откуда и когда - размерности |
|||
|
||||
| zzz9 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 12.3.2012 Репутация: нет Всего: нет |
Спасибо вам за ответы
Теперь некоторые сомнения развеяны. Я думаю для каждого числа и переменной задавать едницу измерения, заполнять из как мне подсказали во время синтаксического разбора. Во время вычислений обрабатывать их взаимодействие.
Строку вводит пользователь в диалоге. Перед диалогом заранее устанавливаются единицы измерения функции (результата) и аргументов, о которых сообщается пользователю. Все это используется в программе САПР как параметризация. Фух, задача упростилась, потому что взаимодействие единиц измерения выражения в произвольной форме, как я понял достаточно сложно. Теперь буду считать все константы в безразмерных величинах, а если пользователь захочет ввести константу, которая бы автоматически переводилась из разных единиц в зависимости от установок и пересчитывалась в системные, то пользователь должен указать в диалоге контанту, например a = 5 и указать ее единицу измерения. Это сообщение отредактировал(а) zzz9 - 13.3.2012, 08:30 |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
в принципе, можно упростить интерфейс пользователя, введя константы mm, K, kg, и т.д.
тогда можно будет естественным образом писать 10mm/s*2s+3mm (под 10mm подразумевается 10*mm) -------------------- qqq |
|||
|
||||
| zzz9 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 12.3.2012 Репутация: нет Всего: нет |
Тоже идея! Но в моем случае, проблемма не в самих измерениях внутри одной единицы, например: мм, км, см. А как какой тип измерения расценивать константы и результаты фукнций, то есть либо мм, либо цельсий. А единицы мм, км, см зависят от текущих установок. Но идея хорошая. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
||||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
zzz9, Можно пытаться "автоматически" приводить константы, если юзер по каким-то причинам постеснялся определить их тип в процессе ввода формулы. Складывать, например, можно только яблоки с яблоками, так что неопределенного типа константа приведется к явно определенному типу левой(правой) части сложения-вычитания. С умножением-делением сложнее, там бывают и "просто константы" и явные типы в процессе операции трансформируются...
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| zzz9 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 12.3.2012 Репутация: нет Всего: нет |
Вначале все будет переводиться в системные величины, потом добавляться единица. Сложновато просто так проводить анализ и подсчет. |
|||
|
||||
| zzz9 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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. Все это никак не стыкуется, что я делаю не так? |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
правила сложения правильные:
трактовка неправильна. температура - интенсивная величина и свойством аддитивности не обладает Добавлено через 9 минут и 53 секунды zzz9, тут дело даже не в формуле преобразования C->K, Вы можете перейти к Дж, но аддитивное свойство не появится: соединив два тела с температурой T итоговая температура не станет равной 2T. Уместно говорить лишь об изменении температуры (вычитании). Т.е. в реальной жизни, в правильных физических формулах сложение температур не появится. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
кстати. факт неаддитивности не мешает вычислять, например, среднее значение, что требуется довольно часто:
|
|||
|
||||
| zzz9 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 12.3.2012 Репутация: нет Всего: нет |
baldina, спасибо большое.
|
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |