-
ошибка плавающая. повторное внесение показало равенство
-
ага, стабильно возникает,если сначала написать выражение 2 (a+b)*(c+d)*(y+2x) сравнить, затем исправить на (a+b)*(c+d)*(y+2*x) сравниваем - ошибка.
-
> [21] kilkennycat © (01.12.16 20:09)
Загадочная ошибка. Что-то с коцами строк из мемок что ли, так и не понял, сегодня уже не осилю. Заменил вот такое t.Pars(memExpr1->Text + L"-(" + memExpr2->Text + L")"); на вот такое t.Pars(String().sprintf(L"%s-(%s)", memExpr1->Text.c_str(), memExpr2->Text.c_str()).c_str()); стало стабильно, хотя под дебагером всплывает одинаковая строка в функции bool Pars(wchar_t *e) Это в модуле где вся работа делается.
Заодно на Юникод переделал, перед исправлением основной ошибки. А экзешник в новой версии распух аж в 6 раз. Ладно, фиг с ним, развлёкся маленько.
-
-
> [22] Inovet © (01.12.16 22:04) > t.Pars(memExpr1->Text + L"-(" + memExpr2->Text + L")");
ну тут, конечно, ещё c_str() была.
-
теперь: (a+b)*(c+d+d)*(y+2*x) и (a+b)*(c+d+d)*(y+x+x) выдает неравны. изначально, независимо ни от чего
(a+b)*(c+d+d)*(y+2*x) и (a+b)*(c+d+d)*(y+2*x) выдает то равны, то неравны каждое сравнение
-
> выдает то равны, то неравны каждое сравнение
после второго сравнения. любого.
-
Как вы это делаете-то? Равны... Не равны... В принципе упрощает-то оно правильно или нет?
По интерфейсу - Ctrl+A не работает, окно не растягивается, это дюже неудобно. А мне как этим пользоваться программно? Просто упростить оно может или нет? Мож в виде DLL или хоть из командной строки передавать ей данные?
-
> В принципе упрощает-то оно правильно или нет?
в принципе правильно.
-
> [27] An a Student (02.12.16 01:17)
Да окно там дело десятое, можно и в ДЛЛ собрать - на входе строка, с выходе преобразованная строка, но я это одноразовое поделие не предлагал в качестве рабочего инструмента, а просто как пример возможности сделать самостоятельно. Придётся, конечно, делать, и не один день. Зато интересно. Ты вот лучше скажи - для чего тебе надо именно преобразования? Судя по > [1] An a Student (28.11.16 14:52) > И было бы неплохо возможность указывать значения переменным. > Например для того примера укажем что "b = -1/20" и тогда > должно выдать просто "2".
Может, тебя устроит какой-нибудь готовый скриптовый движок, не из тяжёлой артилерии с мощной математикой из уже озвученных выше математических программ? Есть бесплатные скрипты. Например http://torry.net/authorsmore.php?id=5949Есть платные. Например https://www.fastreport.ru/ru/product/fast-script/Я давно не интересовался. Искать по словам "script Delphi", "скриптовый движок Delphi"
-
> [25] kilkennycat © (01.12.16 22:34) > (a+b)*(c+d+d)*(y+2*x) и (a+b)*(c+d+d)*(y+x+x) выдает неравны. > изначально, независимо ни от чего
Первое вообще неправильно, причём нестабильно. Что-то с вычислением констант, похоже. Ну, по хорошему, надо бы дальше отлаживать.
-
> Inovet © (02.12.16 06:26) [30] > Ну, по хорошему, надо бы дальше отлаживать.
да. и добавить знак деления, а то 3 действия есть, а 4-го нет.
-
Нет, это просто самый "полный/очевидный" случай, таких будет мало. Для моего уровня говорю не так просто самому. По каким хоть принципам/алгоритмам это делается? Да и мне не надо исходников, просто что-то готовое, к чему можно обращаться из кода Делфи. Юнит/DLL или типа того.
И модуль. И степень.
P.S. Ссылка из [3] работает, уже думал грузить в TWebBrowser и парсить упрощённое, но оказалось оно некоторые переменные считает числами. Например вместо "e" ставит 2.7183, оно как бы ясно, но у меня это переменная.
|