Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Roberto Rocha

Arvore Aritimetica de Expressao

Recommended Posts

Estou fazendo um trabalho sobre uma arvore de expressao aritimetica. Nela tenho que fazer as quatros operaçoes e calcular. respeitando a ordem dos operadores tendo parentes.

Pis eu ja faz uma semana que estou quebrando a cabeça e nao sai nisto(codigo fonte):

 

Sealguem pode me ajudar em qualquer coisa eu fico muito grato.

Obrigado.

 

#ifndef ARVORE_H_INCLUDED
#define ARVORE_H_INCLUDED
#include <iostream>
using namespace std;
struct NoArvore{
string expressao;
char dado;
NoArvore *dir;
NoArvore *esq;
};
struct Tarvore{
NoArvore *raiz;
int qtd;
};
void inicializa(Tarvore &arv){
arv.raiz=NULL;
arv.qtd = 0;
}
void insere(NoArvore *&no, char dado){
if (no == NULL){
no = new NoArvore;
no->dado = dado;
no->dir = NULL;
no->esq = NULL;
}else{
if (dado > no->dado){
insere(no->dir, dado);
}else{
if(dado < no->dado){
insere (no->esq, dado);
}
}
}
}
/*void pre_fixo (NoArvore *raiz, char simb){
if(raiz != NULL){
if (raiz->dado == simb)
cout << raiz->dado << "\n";
pre_fixo(raiz->esq);
pre_fixo(raiz->dir);
}
}*/
#endif // ARVORE_H_INCLUDED
#ifndef OPERACOES_H_INCLUDED
#define OPERACOES_H_INCLUDED
#include <iostream>
using namespace std;
#include"arvore.h"
void montar_arvore(NoArvore &a,string expressao){
char simbl;
int cont=0;
for (int i = 0 ; i < expressao.size() ; i++){
simbl = expressao;
if(simbl == '('){
cont++;
}
if(simbl == ')'){
cont--;
}
if(cont==0){
if((simbl == '+' || simbl == '-') && (expressao[i+1] >= 48 && expressao[i+1] <= 57)){
insere(a,simbl);
}
}
if((simbl == '*' || simbl == '/') && (expressao[i+1] >= 48 && expressao[i+1] <= 57)){
insere(a,simbl);
}
if((simbl == '+' || simbl == '-') && (expressao[i+1] >= 48 && expressao[i+1] <= 57)){
insere(a,simbl);
}
}
}
int calcExp(NoArvore no){
if(no == NULL)
return 0;
switch(no->dado){
case '+': return calcExp(no->esq) + calcExp(no->dir);
case '-': return calcExp(no->esq) - calcExp(no->dir);
case '*': return calcExp(no->esq) * calcExp(no->dir);
case '/': return calcExp(no->esq) / calcExp(no->dir);
default : return calcExp(no);
}
}
#endif // OPERACOES_H_INCLUDED

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.