Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2009, 19:35   #11
olesyaA
Новичок
Джуниор
 
Регистрация: 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
olesyaA вне форума Ответить с цитированием
Старый 30.05.2009, 19:39   #12
olesyaA
Новичок
Джуниор
 
Регистрация: 29.05.2009
Сообщений: 14
По умолчанию

вот еще откопала..
olesyaA вне форума Ответить с цитированием
Старый 30.05.2009, 19:41   #13
olesyaA
Новичок
Джуниор
 
Регистрация: 29.05.2009
Сообщений: 14
По умолчанию

вот еще я нашла
olesyaA вне форума Ответить с цитированием
Старый 30.05.2009, 19:41   #14
olesyaA
Новичок
Джуниор
 
Регистрация: 29.05.2009
Сообщений: 14
По умолчанию

ой)я думаал не дошло)
olesyaA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дерево 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