Вверх ↑
Этот топик читают: Гость
Ответов: 327
Рейтинг: 5
#1: 2013-04-24 01:01:30 ЛС | профиль | цитата
можно ли как то формулу по которой будет считать MathParce взять из потока???
или только до запуска можно ее написать?
карма: 0

0
Разработчик
Ответов: 26304
Рейтинг: 2146
#2: 2013-04-24 01:24:56 ЛС | профиль | цитата
knoot0279 писал(а):
можно ли как то формулу по которой будет считать MathParce взять из потока???

Привет, а галочку поставить в свойстве MathStr и через появившуюся точку doMathStr загнать формулу не судьба
карма: 22

0
Ответов: 327
Рейтинг: 5
#3: 2013-04-24 01:45:37 ЛС | профиль | цитата
извиняюсь затупил
------------ Дoбавленo в 01.45:
а не подскажете как сделать из этого "2x^3-3x^2-12x+1" формулу которую парсер поймет? я что то сообразить никак не могу
при x например 1,2 и т.д
карма: 0

0
Разработчик
Ответов: 26304
Рейтинг: 2146
#4: 2013-04-24 02:58:33 ЛС | профиль | цитата
2*%1^3 - 3*%1^2 - 12*%1 + 1

Add(MainForm,2953706,126,126)
{
}
Add(MathParse,14411225,189,182)
{
MathStr="2*%1^3 - 3*%1^2 - 12*%1 + 1"
ResultType=0
link(onResult,11623520:doText,[])
link(X1,5658038:Text,[])
}
Add(Edit,5658038,189,126)
{
Left=20
Top=10
Width=175
Text="2"
}
Add(Edit,11623520,245,182)
{
Left=20
Top=35
Width=175
Text=""
}
Add(Button,12490101,126,182)
{
Left=80
Top=60
TabOrder=-1
link(onClick,14411225:doCalc,[])
}


карма: 22

0
Ответов: 9906
Рейтинг: 351
#5: 2013-05-02 11:56:26 ЛС | профиль | цитата
Слушай nesco, а не добавить ли нам туды дополнительную опцию.
Внешнее распознавание неопознанных имен

Типа, если в формуле написано: 2*%1^3 - 3*%1^2*Bessel(%1,1.5) - 12*%1 + 1
-- то сегодня парсер, распознавши имя Bessel, скажет: Syntax error.

Предложение такое: пусть будет св-во ExtNames. Если оно <=0, или >DataCount -- то пусть будет все как есть. Если >0, и <=DataCount -- пусть отправляет наверх (на пин с этим номером) событие, в голове MT-потока которого стоит распарсенное имя.

Вопрос такой: достойно ли это для разработки, чего думаешь
карма: 9

0
Ответов: 8955
Рейтинг: 824
#6: 2013-05-02 12:36:42 ЛС | профиль | цитата
Galkov, а что, "там наверху" событию делать? Есть же onError
карма: 19

0
Ответов: 16884
Рейтинг: 1239
#7: 2013-05-02 12:43:15 ЛС | профиль | цитата
Леонид, насколько я понял, а там наверху функция(блок), которая вычисляет этот Bessel (или любое другое)
Хотя, как это будет выглядеть, даже не представляю.
Ведь его можно вычислить заранее и в формулу вставить уже готовое значение
2*%1^3 - 3*%1^2* %2 - 12*%1 + 1.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 9906
Рейтинг: 351
#8: 2013-05-02 13:21:55 ЛС | профиль | цитата
Tad писал(а):
Ведь его можно вычислить заранее и в формулу вставить уже готовое значение

Скажем так, не всегда можно ЗАРАНЕЕ.
Для этого нужно знать формулу. Если есть метод doMathStr, значит гарантий это знания как бы и нет. Вот такое вот логическое извращение...
Эту картинку видел?



Ну конечно можно, делаю же как-то (это "как-то" на рассыпухе можно даже назвать -- "мама не горюй")
Перед вычислением, ищу в формуле знакомые имена, проверяю, предыдущий символ (чтобы не продолжение другого имени), проверяю последующий символ (чтобы не начало другого имени), делаю замену на вызов точки, делаю doMathStr, и считаю.
------------ Дoбавленo в 13.21:
В общем, еще один парсинг <Имени> на рассыпухе, возможно не самый корректный...
Когда у нас один корректный парсер-то -- уже есть, у нутре MathParse-ра
карма: 9

0
Ответов: 8955
Рейтинг: 824
#9: 2013-05-02 14:44:11 ЛС | профиль | цитата
Galkov, ну тогда составить список с формулами наиболее употребляемых функций одной переменной, да и вычислять их, подставляя уже сосчитанное в исходную формулу, и нечего наверх передавать, хотя, если представить себе наверху ещё один MathParse, то, конечно, получиттся более универсально, но надо-ли, как недавно подмечено "спрашивают, как секунды в часы перевести, а тут интегральный синус растолковывать"
карма: 19

0
Разработчик
Ответов: 26304
Рейтинг: 2146
#10: 2013-05-02 14:50:11 ЛС | профиль | цитата
Galkov писал(а):
Вопрос такой: достойно ли это для разработки, чего думаешь

В принципе, это может дать очень интересный вариант решения некоторых задач. Если использовать совместно со StrList-ом, то спокойно можно выбирать направление решения задачи. А вот чего нам точно не хватает, так это именованного результата. Предположим, что необходимо выполнять некоторые логические операции, и в зависимости от результата выдавать в поток не цифровое значение, а некоторый текст. Это похоже на то, что ты предлагаешь, но только с потоком и уже в конце действия. Если захочешь чего-то сделать, используй версию с SVN, она отличается от оригинальной только мультистрочностью, весьма полезное свойство, кстати
карма: 22

0
Ответов: 9906
Рейтинг: 351
#11: 2013-05-02 15:06:36 ЛС | профиль | цитата
Леонид, бог с ним, с интегральным синусом.
Ты чего, формулу с картики не узнал, что ли
Чего проще-то.
Заморочка в том, что на этапе дизайна схемы ни формула неизвестна, ни список переменных, ни их количество.

А я реально таким калькулятором пользуюсь. Потому-что "инженерный калькулятор" в винде считаю оскорблением в адрес Инженеров.

nesco,
1) щаз займусь тогда
2) обновился уже
карма: 9

0
Ответов: 8955
Рейтинг: 824
#12: 2013-05-02 16:55:19 ЛС | профиль | цитата
Galkov писал(а):
формулу с картики не узнал, что ли
Знакомы с ней более полувека
карма: 19

0
Ответов: 9906
Рейтинг: 351
#13: 2013-05-16 13:23:55 ЛС | профиль | цитата
Ну, скажем -- как-то так...


Add(MainForm,2953706,357,266)
{
Position=1
}
Add(MathParse,13609475,273,266)
{
DataCount=1
MathStr="(1+Buba+22+ГыГы)*Ага(3)+Ого"
ExtNames=1
Point(onError)
link(onResult,2953706:doCaption,[])
link(X1,14343204:GetData,[])
}
Add(Button,720514,203,266)
{
Left=20
Top=20
Data=Integer(2)
link(onClick,13609475:doCalc,[])
}
Add(EventFromData,14343204,273,210)
{
link(onEvent,6183759:doEvent1,[])
link(Data,8357211:Var,[])
}
Add(Hub,6183759,329,210)
{
link(onEvent1,8357211:doName,[(354,216)(354,202)(263,202)(263,181)])
link(onEvent2,14343204:doData,[(354,223)(354,237)(263,237)(263,216)])
}
Add(GlobalVar,8357211,273,168)
{
Name="=="
Point(doName)
}
Add(GlobalVar,9802567,448,231)
{
Name="Buba"
Data=Real(0.11)
}
Add(GlobalVar,10343274,448,259)
{
Name="ГыГы"
Data=Real(0.1)
}
Add(GlobalVar,1378474,448,287)
{
Name="Ага"
Data=Real(0.22)
}
Add(GlobalVar,11217361,448,315)
{
Name="Ого"
Data=Real(0.45)
}
------------ Дoбавленo в 13.23:
тестировал еще мало...
карма: 9

1
файлы: 1mathparsex.rar [6.2KB] [242]
Голосовали:Assasin
Разработчик
Ответов: 26304
Рейтинг: 2146
#14: 2013-05-16 13:40:39 ЛС | профиль | цитата
Galkov писал(а):
тестировал еще мало...

Срочно подтянуть математиков
карма: 22

0
Ответов: 8955
Рейтинг: 824
#15: 2013-05-16 14:42:28 ЛС | профиль | цитата
Galkov, Ага(3) -- функция, которую ещё надо прописать где-то?
ogo.jpg
карма: 19

0
файлы: 1ogo.jpg [76.2KB] [461]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)