Конференция "Основная" » Посоветуйте библиотеку для упрощения алгебраических выражений [D7, WinXP]
 
  • kilkennycat © (01.12.16 20:07) [20]
    ошибка плавающая. повторное внесение показало равенство
  • kilkennycat © (01.12.16 20:09) [21]
    ага, стабильно возникает,если сначала написать выражение 2
    (a+b)*(c+d)*(y+2x)
    сравнить, затем исправить на
    (a+b)*(c+d)*(y+2*x)
    сравниваем - ошибка.
  • Inovet © (01.12.16 22:04) [22]
    > [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 раз.
    Ладно, фиг с ним, развлёкся маленько.
  • Inovet © (01.12.16 22:11) [23]
  • Inovet © (01.12.16 22:19) [24]
    > [22] Inovet ©   (01.12.16 22:04)
    > t.Pars(memExpr1->Text + L"-(" + memExpr2->Text + L")");

    ну тут, конечно, ещё
    c_str()
    была.
  • kilkennycat © (01.12.16 22:34) [25]
    теперь:
    (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) выдает то равны, то неравны каждое сравнение
  • kilkennycat © (01.12.16 22:37) [26]

    > выдает то равны, то неравны каждое сравнение

    после второго сравнения. любого.
  • An a Student (02.12.16 01:17) [27]
    Как вы это делаете-то?
    Равны... Не равны... В принципе упрощает-то оно правильно или нет?

    По интерфейсу - Ctrl+A не работает, окно не растягивается, это дюже неудобно.
    А мне как этим пользоваться программно? Просто упростить оно может или нет?
    Мож в виде DLL или хоть из командной строки передавать ей данные?
  • kilkennycat © (02.12.16 02:09) [28]

    >  В принципе упрощает-то оно правильно или нет?

    в принципе правильно.
  • Inovet © (02.12.16 06:02) [29]
    > [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"
  • Inovet © (02.12.16 06:26) [30]
    > [25] kilkennycat ©   (01.12.16 22:34)
    > (a+b)*(c+d+d)*(y+2*x) и (a+b)*(c+d+d)*(y+x+x) выдает неравны.
    > изначально, независимо ни от чего

    Первое вообще неправильно, причём нестабильно. Что-то с вычислением констант, похоже. Ну, по хорошему, надо бы дальше отлаживать.
  • kilkennycat © (02.12.16 13:47) [31]

    > Inovet ©   (02.12.16 06:26) [30]
    > Ну, по хорошему, надо бы дальше отлаживать.

    да. и добавить знак деления,  а то 3 действия есть, а 4-го нет.
  • An a Student (02.12.16 16:18) [32]
    Нет, это просто самый "полный/очевидный" случай, таких будет мало.
    Для моего уровня говорю не так просто самому. По каким хоть принципам/алгоритмам это делается?
    Да и мне не надо исходников, просто что-то готовое, к чему можно обращаться из кода Делфи. Юнит/DLL или типа того.

    И модуль. И степень.

    P.S.
    Ссылка из [3] работает, уже думал грузить в TWebBrowser и парсить упрощённое, но оказалось оно некоторые переменные считает числами.
    Например вместо "e" ставит 2.7183, оно как бы ясно, но у меня это переменная.
 
Конференция "Основная" » Посоветуйте библиотеку для упрощения алгебраических выражений [D7, WinXP]
Есть новые Нет новых   [118670   +55][b:0][p:0.001]