se que son los push, xq si pongo solo números me lo dá (tmb si comento los PUSH)
alguna idea?, que estóy haciendo mal gracias
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int push(char *pila, char **tope, int n, char dato)
{
if(pila+n==*tope)
return 1;
else
{
**tope = dato;
(*tope)++;
return 0;
}
}
int pop(char *pila, char **tope, char *dato)
{
if(pila==*tope)
return 1;
else
{
(*tope)--;
*dato= **tope;
return 0;
}
}
int tipoparentesis(char valor)
{
switch (valor)
{
case '(' : return 1;
case ')' : return 1;
case '[' : return 2;
case ']' : return 2;
case '{' : return 3;
case '}' : return 3;
default: return 0;
}
}
int presedencia(char dato, char valor)
{
int x, y, as;
switch (dato)
{
case '+' : x=4; as=1; break;
case '-' : x=4; as=1; break;
case '*' : x=3; as=1; break;
case '/' : x=3; as=1; break;
case '^' : x=2; as=2; break;
default: x=0;
}
switch (valor)
{
case '+' : y=4; break;
case '-' : y=4; break;
case '*' : y=3; break;
case '/' : y=3; break;
case '^' : y=2; break;
}
if( (x <= y && as==1) || (x >= y && as==2) )
{
return 1;
} else {
return 0;
}
}
main()
{
char entrada[50], salida[50],temporal[2];
char *pila, *tope, *dato, val;
int i, tam, tam1;
pila = (char *)malloc(sizeof(char)*50);
tope = pila;
printf("Dame tu cadena en infija\n");
scanf("%s",entrada);
tam = strlen(entrada);
for(i=0; i<tam; i++)
{
val = entrada[i];
if (val == '+' || val == '-' || val == '*' || val == '/' || val == '^')
{
nuevo:
if((pop(pila,&tope,dato))== 0)
{
if (presedencia(*dato,val) == 1)
{
temporal[0]=*dato;
strcat(salida,temporal);
goto nuevo;
} else {
push(pila,&tope,12,*dato);
push(pila,&tope,12,val);
}
} else {
push(pila,&tope,12,val);
}
} else if(val == '(' || val == '[' || val == '{')
{
push(pila,&tope,tam,val);
}
else if ((val == ')') || (val == ']') || (val == '}'))
{
again:
if(tipoparentesis(val) != tipoparentesis(*dato))
goto error;
if((pop(pila,&tope,dato)) != 0)
goto error;
if( (*dato == '(' && val == ')') || (*dato == '[' && val == ']') || (*dato == '{' && val == '}') )
{
} else {
temporal[0]=val;
strcat(salida,temporal);
goto again;
}
} else {
temporal[0]= val;
strcat(salida,temporal);
}
}
while(*tope != *pila)
{
if((pop(pila,&tope,dato)) == 0)
{
if( *dato == '(' || *dato == '[' || *dato == '{')
goto error;
temporal[0]=*dato;
strcat(salida,temporal);
}
}
printf("Tu cadena en postfija es:");
printf("%s\n",salida);
system("pause");
return 0;
error:
printf("Tu ecuación está mal formada");
return 1;
}