/* =============================================================================================
Wilfredo Cruz Yarlequé wcruzy@gmail.com
Piura, Perú, Octubre 04 de 2019
Uso de una pila para evaluar expresiones aritmeticas post fijo
============================================================================================= */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
void menu(void);
void main()
{
char expresion[500]; // Expresion algebraica
int s[100]; // arreglo de cien caracteres
int top; // puntero al tope de la pila
int opcion; // opcion del menu
int largo; // longitud de la expresion algebraica
int i, temp;
menu(); // lista las opciones del menu
printf("\nOpcion: ");
scanf("%d", &opcion);
while (opcion != 3)
{
switch(opcion)
{
case 1 : // Lectura de expresion aritmetica
printf("Ingrese expresion aritmetica:\n");
scanf("%s", expresion);
break;
case 2 : // Evaluar expresion
top=0;
printf("\n\nExpresion a evaluar:\n%s\n", expresion);
largo = strlen(expresion);
for (i = 0; i < largo; i++)
{
if (expresion[i] != '+' && expresion[i] != '-' && expresion[i] != '*' && expresion[i] != '/')
{
top++;
s[top]=(int)(expresion[i])-48;
}
else
{
switch (expresion[i])
{
case '+':
temp=s[top-1]+s[top];
top--;
s[top]=temp;
break;
case '-':
temp=s[top-1]-s[top];
top--;
s[top]=temp;
break;
case '*':
temp=s[top-1]*s[top];
top--;
s[top]=temp;
break;
case '/':
if(s[top-1] != 0)
temp=s[top-1]/s[top];
else
temp=0;
top--;
s[top]=temp;
break;
default:
printf("\nOperador no valido...\n");
break;
}
}
}
if (top > 0)
printf("\n\nResultado: %d\n\n\n", s[top]);
else
printf("\n\n**>> Expresion NO correcta...<<**\n\n\n");
break;
default :
printf("\nOpcion no valida...\n");
break;
}
printf("\n\nOpcion: ");
scanf("%d", &opcion);
}
printf("\nFin del programa...\n");
return;
}
// Despliega las opciones del menu
void menu(void)
{
printf("\n\n"
"----------------------------------------\n"
"Ingrese una de las siguientes opciones:\n"
"----------------------------------------\n"
"1 : Ingresar expresion aritmetica\n"
"2 : Evaluar expresion\n"
"3 : Salir del programa\n"
"----------------------------------------\n"
"\n");
return;
}