Ir ao conteúdo
  • Cadastre-se

Calculadora RPN


lucasalbini
Ir à solução Resolvido por dontpanic,

Posts recomendados

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();    }}
Link para o comentário
Compartilhar em outros sites

  • Solução

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
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...