Ir ao conteúdo
  • Cadastre-se
Lucas.augustoP

Pilhas em C - Notação Pós-Fixa ou Polonesa

Recommended Posts

Olá a todos!

 

Estou com algum problema para implementar um programa em C capaz de calcular operações em notação polonesa, onde os operadores são posicionados após as variáveis (exemplo: 2 3 4 + * =  2 * (3 + 4)), e para isso eu devo usar o método de empilha/desempilha. Segue abaixo meu código:

#include <stdio.h>#include <string.h>#include <stdlib.h>#define MAXTAM 50typedef struct {	float Item[MAXTAM];	int Topo;} TADPilha;void TADPilha_Inicia(TADPilha *aPilha) {	aPilha->Topo=0;}void TADPilha_Empilha(TADPilha *aPilha, float x) {	aPilha->Item[aPilha->Topo] = x;	aPilha->Topo++;}float TADPilha_Desempilha(TADPilha *aPilha) {	float x;	x=aPilha->Item[aPilha->Topo];	aPilha->Topo--;	return x;}float Calc(float op1, float op2, char opr) {//Função Calculadora	float resul;	switch(opr) {	case'+':		resul = op1+op2;		break;	case'-':		resul = op2-op1;		break;	case'*':		resul = op1*op2;		break;	case'/':		if(op1 != 0) {			resul = op2 /op1;			break;		}		else {			resul=0;		}	}	return resul;}int main() {	int cont, TamStr;	char operacao[MAXTAM];	float Oper1, Oper2, Resultado;	TADPilha *vetorop;	scanf("%s", operacao);	TamStr=strlen(operacao);	vetorop = (TADPilha *) malloc(sizeof(TADPilha));	TADPilha_Inicia(vetorop);	for(cont=0; cont<TamStr; cont++) {		if(operacao[cont]=='+'||operacao[cont]=='-'||operacao[cont]=='*'||operacao[cont]=='/') {			Oper2=TADPilha_Desempilha(vetorop);			Oper1=TADPilha_Desempilha(vetorop);			Resultado=Calc(Oper1,Oper2,operacao[cont]);			TADPilha_Empilha(vetorop,Resultado);		}		else {			scanf("%f", &Oper1);			TADPilha_Empilha(vetorop,Oper1);		}	}	printf("%f\n" , vetorop->Item[0]);	free(vetorop);	return 0;}

Uso o Code Blocks 13.12 e ele não me apresenta nenhum erro de compilação, mas ao executar o programa ele não retorna os valores corretos no vetor. Por exemplo: ao tentar realizar a operação ABC+*, sendo A=2, B=3 e C=4, ele retorna 16, e deveria retornar 14. Mesmo em operações mais simples ele ainda apresenta os valores errados.

 

Me falaram que poderia ser um erro no ponteiro que não está mudando no empilhar/desempilhar, mas já tentei alterar de vários jeitos e quando ele não apresenta erro, ele retorna 16 no exemplo acima do mesmo jeito.

 

Alguém consegue me ajudar com esse maldito código?

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

×