Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Как упростить формулу


Автор: Sunbeam 3.6.2005, 18:48
Как можно упростить формулу?

Например, есть строка ((1+x)+0).
Нужно убрать лишние скобки и посчитать значение. В итоге печатает 1+x.

Или x^(2-1). Печатает x.

Автор: Амортизатор 3.6.2005, 19:14
Тебе нужно написать ядро системы компьютерной математики? Обратись к разрабам Maple и Mathematica, только они и смогут тебе помочь... smile smile smile

Автор: sergejzr 3.6.2005, 19:29
Это действительно не есть тривиально. Ведь часто могут существовать множества решения одной проблемы.
Например, что оптимальнее, 1+х или х+1?
smile
Но мелочи можно.
Например в твоём варианте можно собрать дерево.
Каждый "лист" дерева сделай обьектом mathObject .
Так же снабди каждый лист виртальной функцией simplify, которая будет возвращать упрощённый обьект.

например

Код

class sum extends mathObject implements simplifier
{
/**
*Свойствами суммы являются непосредственно оба слагаемых.
*/
mathObject  summand1;
mathObject  summand2;
/**
*Функция выполнения упрощения
*/
mathObject  simplify()
{
if(summand1==0) return summand2; //первое слагаемое = =0, можем выкинуть
if(summand2==0) return summand1;// аналогично со вторым
return this; //не упрощается
}
} 


Вот само дерево:
skobka(sum(skobka(sum(1,x)),0))

Потом упрощать начиная "снаружи"

1: скобка не нужна, если она "корень" дерева


2: sum(something,0)=sumething;

3: 1+x не упрощается
получилось: (1+x)
заходим в цикл ещё раз
1: скобка не нужна, если она "корень" дерева

как видим, нужен критерий, чтобы остановиться в цикле. Например можно сказать, если выражения не меняется. Но есть случай, когда оно меняется. но в цикле...

Кстати при наличии дерева очень легко реализовать и другие функции. Например берём производную "виртуальной" функцией derrive();

Автор: Амортизатор 4.6.2005, 01:02
Очень интересно. А где можно почитать про энти самые деревья?
А вообще построение систем СКМ - сложнейшая проблема современности.

Автор: cardinal 4.6.2005, 01:42
Цитата
Обратись к разрабам Maple и Mathematica, только они и смогут тебе помочь...

Чтобы ты был в курсе: все что человеку надо проходят на первом курсе информатики в универе (в Германии)...

Автор: Амортизатор 4.6.2005, 01:59
Но это была шутка. Я хотел лишь сказать, что это серьезная проблема.

З Ы Может ему многого и не нужно, но на первом курсе где-бы то не было невозможно получить знаний, достаточных для построения простейшей СКМ. У меня знакомый учится в МГУ на ВМК, так вот, ДАЖЕ ТАМ они серъезно рассматривать СКМ начали только на 3-ьем курсе (надеюсь ты не будешь ставить под сомнение несомненное преимущество московской школы символьной математики).

Автор: cardinal 4.6.2005, 13:53
Да от его вопроса до твоих СКМ помоему очень далеко... smile Тут помоему все заканчивается на степени...
Цитата
надеюсь ты не будешь ставить под сомнение несомненное преимущество московской школы символьной математики

Перед чем? smile

Автор: Pakshin A. S. 4.6.2005, 16:11
На всякий случай: разборки лучше не устраивать... smile
Давайте жить дружно... smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)