Ir ao conteúdo
  • Cadastre-se
lucasalbini

RESOLVIDO Calculadora RPN

Recommended Posts

Fala Galera! Beleza? Estou precisando de ajuda em um código, onde o intuito era criar uma calculadora RPN(Notação polonesa reversa) usando a estrutura de dados PILHA, estou a um bom tempo com problemas neste código, quando executo e escolho uma das opções ele diz que o mesmo parou de funcionar, talvez seja algum detalhe despercebido, mas preciso de uma luz! Obrigado a todos desde já biggrin.gif

#include<stdio.h>#include<stdlib.h>#include<conio.h>typedef struct elemento{        int dado;        struct elemento *prox;}Elemento;typedef struct pilha{        Elemento *pilha;        Elemento *topo;}Pilha;void Inicializa(){        Elemento *pilha;        Elemento *topo;        pilha=NULL;        topo=(Elemento *)malloc(sizeof(Elemento));        topo->prox=pilha;}void insere(char d){        Elemento *pilha;        Elemento *topo;        Elemento *Novo;        Novo=(Elemento *)malloc(sizeof(Elemento));        Novo->dado=d;        topo->prox=Novo;        Novo->prox=topo->prox;        }char retira (){        Elemento *pilha;        Elemento *topo;        Elemento *Novo;        if (topo->prox == NULL){                printf("A pilha está vazia");        }        else{                Novo=(Elemento *)malloc(sizeof(Elemento));                Novo=topo->prox;                topo=topo->prox;                return Novo->dado;        }}int menu(){printf("\t\n>>CALCULADORA NO MODO RPN<<\n");printf("\n\n Escolha uma opcao:");printf("\n 1- Inserir valores para calculo");printf("\n 2- Resultado");}void calculadora(){   Elemento *topo;   char v1, v2, op, resultado;   while(topo->prox!=NULL){        v1 = retira();        v2 = retira();        op = retira();        printf("\n%d %c %d = ", v1,op,v2);        switch (op) {        case '+': resultado = v1 + v2;        break;        case '-': resultado = v1 - v2;        break;        case '*': resultado = v1 * v2;        break;        case '/': resultado = v1 / v2;        break;        default : printf( "Operador Inexistente\n");        system("pause");        }        insere(resultado);   }}int main(){    Inicializa();    int opcao, resultado;    char v;    menu();    printf("\n\n-->> ");    scanf("%i", &opcao);    if (opcao==1){            printf("\n>>> ");            scanf("%c", &v);            insere(v);    }    if (opcao==2){            calculadora();            resultado = retira();            printf("O valor final é = %i", resultado);    }    if (opcao != 1 && opcao != 2){            printf("\nEscolha Invalida.\n\n");            menu();    }}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tá usando variáveis locais nas funções que manipulam a pilha. Cada vez que essas funções terminam, a pilha é perdida.

Por exemplo, a função main chama a função inicializa(). Essa função adiciona um elemento naa pilha e inicializa ela, mas assim que essa função termina a pilha se perde. O main não tem como saber o que aconteceu naquela função. A mesma coisa acontece na função insere() e retira().

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara muito obrigado mesmo, estava tão focado em resolver o problema na pilha e esqueci deste detalhe...MUITO OBRIGADO MESMO :DD

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×