![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Новичок
Джуниор
Регистрация: 29.05.2009
Сообщений: 14
|
![]()
class MultiplicationNode: public BinNode{
public: MultiplicationNode(Node *LEFT,Node *RIGHT):BinNode(LEFT,RIGHT){} double calc(){return left->calc()*right->calc();} void print(){left->print(); std::cout<<"*("; right->print(); std::cout<<")";} //------------------------------------------------------------------------------ class DivisionNode: public BinNode{ public: DivisionNode(Node *LEFT,Node *RIGHT):BinNode(LEFT,RIGHT){} double calc(){return left->calc()/right->calc();} void print(){left->print(); std::cout<<"/("; right->print(); std::cout<<")";} }; //------------------------------------------------------------------------------ class PowerNode: public BinNode{ public: PowerNode(Node *LEFT,Node *RIGHT):BinNode(LEFT,RIGHT){} double calc(){return pow(left->calc(),right->calc());} void print(){left->print(); std::cout<<"^("; right->print(); std::cout<<")";} }; //------------------------------------------------------------------------------ Node* postfixtree(const char *str){ Node *x1,*x2,*y; int i=0; stack <Node*> S; while (str[i]!='\0'){ char ch=str[i]; switch(ch){ case '+': x2=S.pop(); x1=S.pop(); y=new PlusNode(x1,x2); break; case '-': x2=S.pop(); x1=S.pop(); y=new MinusNode(x1,x2); break; case '*': x2=S.pop(); x1=S.pop(); y=new MultiplicationNode(x1,x2); break; case '/': x2=S.pop(); x1=S.pop(); y=new DivisionNode(x1,x2); break; case '^': x2=S.pop(); x1=S.pop(); y=new PowerNode(x1,x2); break; default : if((ch>=48)&&(ch<=57)){y=new NumNode(ch-48);} else if(((ch>='a')&&(ch<='z'))||((ch>='A ')&&(ch<='Z'))){y=new ParameterNode(ch);} else{x1=S.pop(); y=new UnFuncNode(ch,x1);}} S.push(y); ++i;} return S.pop(); } //------------------------------------------------------------------------------ int main(int argc, char* argv[]){ Node *p1; p1=postfixtree("AB+C*D-"); p1->print(); std::cout<<std::endl; double F=p1->calc(); std::cout<<"="<<F<<std::endl; std::system("pause"); return 0;} Сообщение Это спам #225 Павел 夜狩猟家 Соловьев 27 мая 2009 в 23:37 // stack.h #ifndef _STACK_ #define _STACK_ template <class T> class stack{ T* datastore; int first,maxsize; public: stack(unsigned int N=10):first(-1),maxsize(N){datastore=new T [N];} ~stack(){delete []datastore;} T& top()const{return datastore[first];} T pop(){return datastore[first--];} void push(const T &X){ first++; if(first>=maxsize){int newsize=maxsize+1; T* temp=new T[newsize]; for(int i=0;i<maxsize;++i){temp[i]=datastore[i];} delete []datastore; datastore=temp; maxsize=newsize;} datastore[first]=X;} }; #endif |
![]() |
![]() |
![]() |
#12 |
Новичок
Джуниор
Регистрация: 29.05.2009
Сообщений: 14
|
![]()
вот еще откопала..
|
![]() |
![]() |
![]() |
#13 |
Новичок
Джуниор
Регистрация: 29.05.2009
Сообщений: 14
|
![]()
вот еще я нашла
|
![]() |
![]() |
![]() |
#14 |
Новичок
Джуниор
Регистрация: 29.05.2009
Сообщений: 14
|
![]()
ой)я думаал не дошло)
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Дерево | Rifler | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 06.05.2008 08:42 |
Построить дерево в ширину | JET_FLASH | Помощь студентам | 3 | 06.02.2008 08:18 |
Помогие с двоичными и 16ными значениями !! | UnD)eaD)Snake | Общие вопросы Delphi | 3 | 01.08.2007 20:47 |
Дерево | Yoger | БД в Delphi | 3 | 25.01.2007 01:24 |