Wagner da Silva

Membros
  • Content Count

    2
  • Joined

  • Last visited

Community Reputation

0 Neutro

About Wagner da Silva

  1. Pra quem queira saber o resultado desse código, está aqui. Elabore um programa em linguagem C que faça a leitura da árvore binária abaixo, executando as expressões aritméticas e imprimindo na tela o resultado do cálculo efetuado. O resultado retornado pela expressão definida na árvore abaixo é o valor 20. #include <stdio.h> typedef struct ARVORE { char operador; float valor; struct ARVORE *esquerda; struct ARVORE *direita; } arvore; float avalia(arvore *a) { float x,y,res; // Se os ramos esquerdo e direito forem terminais, então o nodo contém um valor // Retornar esse valor if (a->esquerda == NULL && a->direita == NULL) { return a->valor; } else { // Senão, isto é, se os ramos esquerdo e direito não forem terminais, então o nodo contém um operador // Retornar recursivamente o resultado da operação requerida pelo nodo x = avalia(a->esquerda); y = avalia(a->direita); switch (a->operador) { case '+': res = x + y; break; case '-': res = x - y; break; case '*': res = x * y; break; case '/': res = x / y; break; } return res; } } int main() { arvore nodo[9] = { {'+',0,&nodo[1],&nodo[2]}, {'*',0,&nodo[3],&nodo[4]}, {' ',5,NULL,NULL}, {'-',0,&nodo[5],&nodo[6]}, {'+',0,&nodo[7],&nodo[8]}, {' ',6,NULL,NULL}, {' ',3,NULL,NULL}, {' ',4,NULL,NULL}, {' ',1,NULL,NULL} }; float resultado; resultado = avalia(&nodo[0]); printf("Resultado = %2.0f\n",resultado); }
  2. Olá construí este código em arvore binaria mas, está dando erro , apenas preciso fazê-lo apresentar um resultado, que é o numeral 20. alguém poderia me ajudar. #include <stdio.h> typedef struct arv Arv; struct arv { char op; float valor; struct arv *esq, *dir; }; // Implementar esta função float avalia (Arv *a) { if ((a->esq == NULL) && (a->dir == NULL)) return a->valor; else{ if(a->op == ‘+’) return avalia(a->esq) + avalia(a->dir) if(a->op == ‘-’) return avalia(a->esq) - avalia(a->dir) if(a->op == ‘*’) return avalia(a->esq) * avalia(a->dir) if(a->op == ‘/’) return avalia(a->esq) / avalia(a->dir) } } int main(void) { // Árvore para representar a operação: 5 * 3= 15 Arv no[3]; // Em vetor Arv op, val1, val2; // Em variáveis // Vetor no[0].op = '*'; no[0].esq = &no[1]; no[0].dir = &no[2]; no[1].valor = 5; no[2].valor = 3; printf("Resultado da expressao: %.2f\n", avalia(&no[0])); // Variáveis op.op = '*'; op.esq = &val1; op.dir = &val2; val1.valor = 5; val2.valor = 3; printf("Resultado da expressao: %.2f\n", avalia(&op)); }