Конференция "Основная" » Посоветуйте библиотеку для упрощения алгебраических выражений [D7, WinXP]
 
  • An a Student (28.11.16 14:39) [0]
    Ребят, есть ли какая-нибудь библиотека, которая может принимать на вход текст вида:
       3+(a+x*x*0-10-10*2*1*b+8)/1-a
    А выдавать упрощённое:
       1-20*b
    То есть - раскрывать скобки, группировать/складывать там где возможно, выкидывать умножение на ноль/единицу и деление на единицу.

    Если нету библиотек для Делфи/ФриПаскаля, может кто знает онлайн-сервисы - я бы попробовал через IdHTTP отправлять/получать данные.
  • An a Student (28.11.16 14:52) [1]
    И было бы неплохо возможность указывать значения переменным.
    Например для того примера укажем что "b = -1/20" и тогда должно выдать просто "2".
  • KSergey © (29.11.16 14:01) [2]
  • KSergey © (29.11.16 14:39) [3]
  • Inovet © (29.11.16 15:41) [4]
    > [3] KSergey ©   (29.11.16 14:39)
    > Блин, и ведь работает!
    > Офигеть

    Калькулятор у меня на столе
    http://s018.radikal.ru/i503/1611/ab/366a7d2f0384.jpg

    А по сабжу, я специально не занимался, но есть ведь библиотеки от чего-то из этого Mathcad, Mathlab, Maple.
  • An a Student (29.11.16 20:03) [5]
    эм... Я ж как бы спрашиваю за "библиотеку" или "компонент" под Делфи, а не сайт-онлайн или чужую прогу...

    А чего, Mathcad/Mathlab/Maple можно юзать под Делфи? Не задумывался об таком. И без установки самих программ будет работать, да?
  • Inovet © (30.11.16 04:32) [6]
    > [5] An a Student   (29.11.16 20:03)

    Сайт тот наверняка и пользуется бмблиотекой. Под Делфи библиотеками можно пользоваться. Гугл есть?
    https://www.google.ru/?gws_rd=ssl#newwindow=1&q=maple+delphi
    https://www.google.ru/?gws_rd=ssl#newwindow=1&q=matlab+delphi
  • KSergey © (30.11.16 08:11) [7]
    > An a Student   (29.11.16 20:03) [5]
    > эм... Я ж как бы спрашиваю за "библиотеку" или "компонент" под Делфи, а не сайт-онлайн или чужую прогу...

    Ну да, а вот это писалось во сне, очевидно:

    > An a Student   (28.11.16 14:39) 
    > Если нету библиотек для Делфи/ФриПаскаля, может кто знает
    > онлайн-сервисы - я бы попробовал через IdHTTP отправлять/получать данные.
  • An a Student (30.11.16 09:16) [8]
    > Сайт тот наверняка и пользуется библиотекой.

    Думаете сайт написан на Делфи?
    В найденных ссылках навскидку вопросы на форумах без ответов, буду поковырять поглубже.

    > [7]

    Это как крайний вариант, если окажется что под Делфи совсем вообще нифига нету. С:
  • Inovet © (30.11.16 09:39) [9]
    > [8] An a Student   (30.11.16 09:16)
    > Думаете сайт написан на Делфи?

    Причём тут на чём там сайт реализован. Библиотеки, например, на Си++ написаны, а подключить их можно много к чему. Разве не очевидные вещи? Тебе надо их найти, найти их описание и вызывать их функции из Делфи.
  • Inovet © (30.11.16 09:46) [10]
    А самому это реализовать не предлагать? Не так уж оно страшно для простых арифметических символьных преобразований. А значения переменных, после реализации символьных преобразований, в полученное выражение подставить и вообще легко.
  • An a Student (01.12.16 01:32) [11]
    Поищем на выходных, поищем...

    Я только учусь. Не думаю что осилю такое на данный момент. Даже примерно не представляю как и с какой стороны подступаться.
    У меня генератор формул, для себя. По вводу пользователя, с вариациями. Но в какой-то момент они становятся слишком большими из-за лишних
    ... + 5*x + ... - 5*x + ... - (...)*(...)*(...)*1*1*0*1/1+...
    Надо бы их упрощать автоматически, а то после каждого изменения параметра на форме вручную упрощать 200~300 формул? Это не дело.
  • kilkennycat © (01.12.16 02:00) [12]

    > Не так уж оно страшно для простых арифметических символьных
    > преобразований.

    напиши раскрытие скобок (a+b)(c+d)(x+y) - уже несколько тяжко становится.
  • Inovet © (01.12.16 02:44) [13]
    > [12] kilkennycat ©   (01.12.16 02:00)
    > напиши раскрытие скобок (a+b)(c+d)(x+y) - уже несколько
    > тяжко становится.

    Сколько угодно в любом сочетании. Недавно ссылку давал. Лет 10 назат хороший знакомый попросил курсовую сделать родственнику. Справка по F1.
    https://cloud.mail.ru/public/4JqA/eZAgnyy3g
  • Inovet © (01.12.16 02:57) [14]
    (a+b)*(c+d)*(x+y)
    Какой ты вредный, зависла на твоём примере.:) Надо будет найти косяк.
  • kilkennycat © (01.12.16 12:28) [15]

    > Inovet ©   (01.12.16 02:57) [14]

    это сказывается работа бета-тестером в прошлом :)
  • Inovet © (01.12.16 19:00) [16]
    > [15] kilkennycat ©   (01.12.16 12:28)
    > это сказывается работа бета-тестером в прошлом :)

    Что интересно, студент курсовой сдал.:) Видать, ни он сам, ни преподаватели не тестировали. Я поправил, надеюсь. Можешь тестировать.:)
    https://cloud.mail.ru/public/JiCh/djypzF2QX

    В общем, не столько это сложно, сколько кропотливо. Для нормальной программы я бы студенчиские подходы не стал применять, сделал бы более универсально и не на коленке, а так всё только в рамках задания и на голом Си++, ну кроме самой формы.
  • kilkennycat © (01.12.16 19:46) [17]

    >  Можешь тестировать.:)

    404 :))
  • Inovet © (01.12.16 19:55) [18]
    > [17] kilkennycat ©   (01.12.16 19:46)
    > 404 :))

    https://cloud.mail.ru/public/KuDd/LQxHX2PsX
  • kilkennycat © (01.12.16 20:05) [19]
    (a+b)*(c+d)*(y+x+x)
    и
    (a+b)*(c+d)*(y+2*x)

    Выражение 1
    ( a + b  ) * ( c + d  ) * ( y + x + x  )
    Выражение 1 после преобразования
    2 * a * c * x + a * c * y + 2 * a * d * x + a * d * y + 2 * b * c * x + b * c * y + 2 * b * d * x + b * d * y
    Выражение 2
    ( a + b  ) * ( c + d  ) * ( y + 2 * x  )
    Выражение 2 после преобразования
    2 * a * c * x + a * c * y + 2 * a * d * x + a * d * y + 2 * b * c * x + b * c * y + 2 * b * d * x + b * d * y
    Разность выражений 1 и 2
    -2 * a * d * x + 2 * b * d * x
    Выражения тождественно неравны.
 
Конференция "Основная" » Посоветуйте библиотеку для упрощения алгебраических выражений [D7, WinXP]
Есть новые Нет новых   [118648   +59][b:0][p:0.001]