DeadCold
-
Posts
2 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por DeadCold
-
-
Olá gente, sou novo no fórum, criei uma conta aqui para tirar uma dúvida, pretendo postar mais. Estou estudando Estrutura de Dados em C na faculdade e preciso implementar uma pilha em C, comecei a fazer um código utilizando vetores, de início comecei a fazer com struct e ponteiros, mas o professor liberou para fazer com Vetor. Ele quer que seja criada uma calculadora RPN (notação polonesa reversa) usando o conceito de Pilha. Meu código está rodando, porém não funciona, o problema está na hora de inserção de valores na pilha, porém não sei o que é! Ao invés de me retornar o resultado da conta, e/ou inserir um número, simplesmente me retorna uma posição de memória e não o valor que inseri.
#include <stdio.h>#include <stdlib.h>#define MAXPUSH 10#define true 1#define false 0int pilha[MAXPUSH];int push(int val, int x){if (pilha[0] == NULL){pilha[0] = val;x++;}if (x == MAXPUSH){printf("Overflow!\n\n");system("pause");exit(1);}pilha[x]=val;x++;return x;}int pop(int x){if(x < 0){printf("Underflow!\n\n");system("pause");exit(1);}pilha[x] = NULL;x--;return x;}int main(){int status=1;int val, op, x;printf("Bem-vindo! Calculadora RPN usando conceito de Pilha\n");printf("Informe uma opcao:\n");while (status==1){printf("\n\n[1] - Soma\n[2] - Subtracao\n[3] - Multiplicacao\n[4] - Divisão\n[5] - Potenciacao\n[6] - Inserir Numero\n[7] - Sair\n\n");printf("Informe o codigo referente ao processo desejado: ");scanf("%d",&op);while (op!= 1 && op!= 2 && op!= 3 && op!=4 && op!=5 && op!=6 && op!=7){system("cls");printf("Informe uma opcao:\n");printf("[1] - Soma\n[2] - Subtracao\n[3] - Multiplicacao\n[4] - Divisao\n[5] - Potenciacao\n[6] - Inserir Numero\n[7] - Sair\nOpcao desejada: ");scanf("%d",&op);}system("cls");if (op==1){if (x < 2){printf("Impossivel realizar operacao!\n\n");system("pause");system("clear");exit(1);}printf("Soma!");val = pilha[x-1] + pilha[x];pop(x);pop(x);push(val, x);printf("\n\nValor do resultado: %d",val);}if (op==2){if (x < 2){printf("Impossivel realizar operacao!\n\n");system("pause");system("clear");exit(1);}printf("Subtracao!");val = pilha[x-1] - pilha[x];pop(x);pop(x);push(val, x);printf("\n\nValor do resultado: %d",val);}if (op==3){if (x < 2){printf("Impossivel realizar operacao!\n\n");system("pause");system("clear");exit(1);}val = pilha[x-1] * pilha[x];pop(x);pop(x);push(val, x);printf("\n\nValor do resultado: %d",val);}if (op==4){if (x < 2){printf("Impossivel realizar operacao!\n\n");system("pause");system("clear");exit(1);}printf("Divisao!");val = pilha[x-1] / pilha[x];pop(x);pop(x);push(val, x);printf("\n\nValor do resultado: %d",val);}if (op==5){if (x < 2){printf("Impossivel realizar operacao!\n\n");system("pause");system("clear");exit(1);}val = pilha[x-1] ^ pilha[x];pop(x);pop(x);push(val, x);printf("\n\nValor do resultado: %d",val);}if (op==6){printf("Inserir Numero!\n\nInsira um numero na pilha: ");fflush(stdin);scanf("&d",&val);push(val, x);printf("\n\n");system("pause");printf("\n\n");}if (op==7){printf("Sair!\n\n");system("pause");status = 0;}}return 0;system("pause");}
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
Pilhas em C
em C/C#/C++
Postado
Obrigado BlackScreen, já arrumei o erro, mas mesmo assim, me retorna lixo como memória, estou olhando o código e ainda vejo alguns errinhos, tanto que arrumei. no "if op == 6", meu scanf tá errado
acho que meu problema é que preciso retornar 2 valores da minha função push, preciso retornar o valor que inseri, "val", e o "x" que seria como uma variável contadora, para poder andar pela pilha e controlar se houver Overflow ou Underflow. Mudei meu código e aparentemente tá funcionando aos poucos, nas funções os parâmetros são ponteiros, e quando chamo essas funções na main, uso o "&" para conseguir o valor correto da variavel passada. Ficou confuso, mas isso aí.
Se conseguir progredir mais, vou postar o código aqui