PDA

Просмотр полной версии : загрузка математической формулы из файла и её расчет


rozenbor
25.07.2008, 01:58
Такое возможно?Если да то как?

alexcon314
25.07.2008, 02:22
Возможно все. Ваши мысли?
...
Гдет-о было - MathCad на флэше...ссыль забыл за утопичностью идеи..

rozenbor
25.07.2008, 02:55
идей нет....
mathcad на fash оч смешно

Жень Шень
25.07.2008, 10:46
идей нет....
mathcad на fash оч смешно
Привет!
Тема очень интересная. Но, если mathcad смешно, то ищи в нете другое.
В аттаче подсказка. И еще одно слово для поиска: MathIWYG
Есть и другое решение записи и воспроизведения формул, но оно не получило широкого применения. Если найду пример - выложу.
И последнее. Везде речь о визуализации формул, но не сам расчет, который можно таки проделать на основании записей в том же ХМЛ

Division
25.07.2008, 12:20
Как по мне можно написать простенький парсер формул на флешь (:
На AS мне писать такое не приходилось но думаю вполне осуществимо (:
Идея такая - есть строка с формулой. То есть цифры, операторы и функции. Делается всё рекурсивной функцией, которая на входе получает строку с формулой, а возвращает посчитанный результат. Функция, получив строку, делит формулу на части по оператору с самым низким приоритетом или наличием скобок.
То есть строка 2+2*2*(2+2) будет поделена на две подстроки:
1) 2
2) 2*2*(2+2) // (2+2) - скобки считаются как один операнд
Рекурсия продолжается. Там где у нас осталось "2" операторов больше нету, это конец рекурсии. Двойку функция и возвращает.
Далее, у нас есть ещё строка 2*2*(2+2).
Скармливаем её функции. Она делится на три части.
1) 2
2) 2
3) 2+2
Результат для первых двух уже известен - это двойки. Осталось посчитать третью часть.
Имеем 2 и 2. Я забыл сказать, что знаки(операторы) между частями мы тоже должны где-то хранить (: То в конце эта функция, если она разбила строку на несколько частей должна последовательно выполнить операции между ними. В последнем случае: 2 + 2. Возвращает 4. Операции можно спокойно выполнять слева-направо, так как приоритет операторов будет одинаковый(мы же разбивали строку по оператору с самым низким приоритетом).

Да, описание довольно смутное получилось, но надеюсь идея понятно (:

Жень Шень
25.07.2008, 16:28
Как по мне можно написать простенький парсер формул на флешь
Речь шла о полноценном редакторе и визуализатора математических формул (радикалах, интегралах, простых дробях, степенях, матрицах и пр. пр. пр.

Division
25.07.2008, 16:37
Речь шла о полноценном редакторе и визуализатора математических формул
Эээ... Что-то я не вижу где автор топика говорил об этом... Наверно я не в теме (: Можно цитату?
Если это действительно так, то молчу (: Наверно стоит поискать готовые решения. Например, в гугле.

Alex_beginner
25.07.2008, 16:42
Жень Шень! Почему Вы решили, что речь идет о полноценном редакторе и визуализаторе мат. формул?

Из слов rosenbor'a можно сделать единственный вывод - он хочет загрузить формулы из файла, а потом их рассчитать, вовсе без визуализации. В базовых языках это делается довольно просто, здесь же потребуется разработка довольно сложного рекурсивного алгоритма с приоритетами мат. операций и широким набором функционала.

rozenbor
25.07.2008, 17:43
Речь шла о полноценном редакторе и визуализатора математических формул (радикалах, интегралах, простых дробях, степенях, матрицах и пр. пр. пр.

Речь не шла о визуализации

Как по мне можно написать простенький парсер формул на флешь (:
На AS мне писать такое не приходилось но думаю вполне осуществимо (:
Идея такая - есть строка с формулой. То есть цифры, операторы и функции. Делается всё рекурсивной функцией, которая на входе получает строку с формулой, а возвращает посчитанный результат. Функция, получив строку, делит формулу на части по оператору с самым низким приоритетом или наличием скобок.
То есть строка 2+2*2*(2+2) будет поделена на две подстроки:
1) 2
2) 2*2*(2+2) // (2+2) - скобки считаются как один операнд
Рекурсия продолжается. Там где у нас осталось "2" операторов больше нету, это конец рекурсии. Двойку функция и возвращает.
Далее, у нас есть ещё строка 2*2*(2+2).
Скармливаем её функции. Она делится на три части.
1) 2
2) 2
3) 2+2
Результат для первых двух уже известен - это двойки. Осталось посчитать третью часть.
Имеем 2 и 2. Я забыл сказать, что знаки(операторы) между частями мы тоже должны где-то хранить (: То в конце эта функция, если она разбила строку на несколько частей должна последовательно выполнить операции между ними. В последнем случае: 2 + 2. Возвращает 4. Операции можно спокойно выполнять слева-направо, так как приоритет операторов будет одинаковый(мы же разбивали строку по оператору с самым низким приоритетом).

Да, описание довольно смутное получилось, но надеюсь идея понятно (:

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

iNils
25.07.2008, 18:04
rozenbor, надо использовать кнопку http://www.flasher.ru/forum/images/russian/style3/buttons/edit.gif, а не создавать несколько сообщений подряд.
А для ответов на разные сообщения, на форуме есть режим мультицитирования.

Жень Шень
25.07.2008, 19:02
Жень Шень! Почему Вы решили, что речь идет о полноценном редакторе и визуализаторе мат. формул?:quiet: Возможно потому, что в моем проекте такое должно быть и этой проблемой я вскоре займусь

Из слов rosenbor'a можно сделать единственный вывод - он хочет загрузить формулы ... Кхэ! Если речь шла про 2+2, то про такое уже писалось на форуме. При слове формула у меня возникают ассоциации с корнями, дробями.. и с химическими формулами. У кого что болит, тот про то и пишет... :rtfm:
Если не в попад писал, ссори.
И тогда был бы рад, если кто-нить поделится по данной проблеме в широком смысле (визуализация и редактирование).

Division
25.07.2008, 20:07
При слове формула у меня возникают ассоциации с корнями, дробями
Выражение типа (sqrt(2+2)*2+8)/4 - не формула? (: И корни и дроби. Алгоритм который я привел выше легко расширяется до решения таких формул. У меня даже была реализация его в Delphi... Если будет время напишу наверно в AS, самому интересно стало (:

rozenbor
25.07.2008, 20:20
Devision,у меня такие проги были и на Delphi и в VS2008...

Решил все вычисления для проекта выполнять в php..flash буду использовать только как визуальную среду

chingachgoog
25.07.2008, 20:21
Все же вопрос надо разделить:
1) либо это решение по формуле - и тут никаких сложностей нет.
2) либо это визуализация формулы - и тут ой как все не просто.

rozenbor
25.07.2008, 20:23
Нужно только решение по формуле,я ничего о визуализации не говорил...

Division
25.07.2008, 20:34
rozenbor
Ээ.. Ну мой ник вообще-то Division (:
php это хороший выбор. eval рулит (:

rozenbor
25.07.2008, 20:38
Division
Извиняюсь опечатка
угу eval еще как рулит
кстати,во флеше есть что то типа eval?

Division
26.07.2008, 14:10
кстати,во флеше есть что то типа eval?
Насколько мне известно - нету. На размере плеера экономят (:

Alex_beginner
26.07.2008, 14:20
Есть одноименная функция eval, но выполняемые ею действия чрезвычайно скудны по указанным Division причинам.

Жень Шень
28.07.2008, 11:21
Выражение типа (sqrt(2+2)*2+8)/4 - не формула?
О! Это я то и имел ввиду, а не просто 2+2-1.
Вот готовые решения. Надо только вспомнить с какого сайта.
В 1 примере визуализация, хотя про неё речь не идет. Во втором - графическое отображение формул и собственно калькуляция - то, что хочет автор топика. А там можно и (sqrt(2+2)*2+8)/4 посчитать. У меня 3 получилось :yahoo:

Division
28.07.2008, 12:38
Ну тоды и я похвастаюсь (:
http://flasher.ru/forum/showthread.php?t=114371
Вот за вечер набросал парсер.
Проверку на чушь не успел сделать (:

Furgon
24.05.2011, 18:06
О! Это я то и имел ввиду, а не просто 2+2-1.
Вот готовые решения. Надо только вспомнить с какого сайта.
В 1 примере визуализация, хотя про неё речь не идет. Во втором - графическое отображение формул и собственно калькуляция - то, что хочет автор топика. А там можно и (sqrt(2+2)*2+8)/4 посчитать. У меня 3 получилось :yahoo:
Стоит задача, отобразить в TextField математические формулы: дроби (вертикальная линия), верхние, нижние индексы. Может быть Вы еще помните как решали похожую задачу?