Galera, seguinte eu preciso fazer uma calculadora polonesa em C, esse código está basicamente como o do professor só mudei algumas coisas que estavam dando conflito, preciso urgentemente de ajuda por favor, o programa não está funcionando, apesar de parecer estar certo ;/
A idéia do programa é entrar com, por exemplo:
(3*(4+5))
e ele te retornar a resposta correta, sendo que a leitura é feita tipo:
( , enter
3, enter
*, enter...
Obrigado desde já, e se possível gostaria do máximo de explicações possíveis, por que usei pouco char até hoje, e não sei direito a diferença entre
char valor, e char valor[10] e tal...
#include <stdio.h>
struct ptr{
char valor[10];
struct ptr *prox;
} *p, *num, *op; // num = números .: op = operadores;
void empilha(struct ptr *p1, char valor[10]){
struct ptr *aux;
aux = (struct ptr*) malloc(sizeof(struct ptr));
strcpy(aux -> valor, valor);
aux -> prox = p1;
p1 = aux;
aux = (struct ptr*) NULL;
}
void desempilha(struct ptr *p1, char *num[10]){
struct ptr *aux;
aux = p1;
p1 = aux -> prox;
aux -> prox = (struct ptr*) NULL;
strcpy(*num,aux -> valor);
free(aux);
aux = (struct ptr*) NULL;
}
void cria_expressao(){
struct ptr *aux;
char valor[10];
p = (struct ptr*) NULL;
printf("Entre com a expressao: ( coloque um '.' para indicar o final )");
scanf("%s", &valor);
if(strcmp(valor,".")){
p = (struct ptr*) malloc(sizeof(struct ptr));
strcpy(p -> valor,valor);
aux = p;
printf("Entre com a expressao: ");
scanf("%s", &valor);
while(strcmp(valor,".")){
aux -> prox = (struct ptr*) malloc(sizeof(struct ptr));
aux = aux -> prox;
strcpy(aux -> valor,valor);
printf("Entre com a expressao: ");
scanf("%s", &valor);
}
aux -> prox = (struct ptr*) NULL;
aux = aux -> prox;
}
}
void calcula(){
struct ptr *aux;
int valor,resposta,a1,b1;
char cadeia[10],*a[10],*b[10],*operador[1];
aux = p;
if(p == (struct ptr*) NULL)
printf("não há expressao.");
else{
while(aux != (struct ptr*) NULL){
resposta = atoi(aux -> valor);
if(resposta)
empilha(num,aux -> valor);
else{
if( ! ((strcmp(aux -> valor,"+")) || (strcmp(aux -> valor,"*"))) ){
empilha(op,aux -> valor);
}
else{
if(strcmp(aux -> valor,")")){
desempilha(num,a);
desempilha(num,b);
desempilha(op,operador);
a1 = atoi(a);
b1 = atoi(b);
if(!(strcmp(*operador,"+")))
valor = b1 + a1;
if(!(strcmp(*operador,"*")))
valor = b1 * a1;
itoa(valor,cadeia,10);
empilha(num,cadeia);
}
}
}
aux = aux -> prox;
}
desempilha(num,a);
printf("Resposta = %s", a);
}
}
void mostra(struct ptr *p1){
struct ptr *aux;
aux = p1;
if( p1 == (struct ptr*) NULL )
printf("não há expressao.");
else
while( aux != (struct ptr*) NULL ){
printf("%s ", aux -> valor);
aux = aux -> prox;
}
printf("\n");
}
main(){
cria_expressao();
mostra(p); // para mostrar que a expressao foi lida corretamente
num = (struct ptr*) NULL;
op = num;
calcula();
getch();
}
Pergunta
Thiago Mendes
Galera, seguinte eu preciso fazer uma calculadora polonesa em C, esse código está basicamente como o do professor só mudei algumas coisas que estavam dando conflito, preciso urgentemente de ajuda por favor, o programa não está funcionando, apesar de parecer estar certo ;/
A idéia do programa é entrar com, por exemplo:
(3*(4+5))
e ele te retornar a resposta correta, sendo que a leitura é feita tipo:
( , enter
3, enter
*, enter...
Obrigado desde já, e se possível gostaria do máximo de explicações possíveis, por que usei pouco char até hoje, e não sei direito a diferença entre
char valor, e char valor[10] e tal...
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.