/* =============================================================================================
Wilfredo Cruz Yarlequé wcruzy@gmail.com
Piura, Perú, Octubre 04 de 2019
Uso de una pila para evaluar paréntesis en expresion algebraica
============================================================================================= */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
void menu(void);
void imprimeCaracter(int);
void main()
{
char expresion[500]; // Expresión algebraica
char s[100]; // arreglo de cien caracteres
int top; // puntero al tope de la pila
int opcion; // opción del menu
int largo; // longitud de la expresión algebraica
bool ok; // Valor boolean para expresión correcta
int i;
menu(); // lista las opciones del menú
printf("Opción: ");
scanf("%d", &opcion);
while (opcion != 3)
{
switch(opcion)
{
case 1 : // Lectura de expresión algebraica
printf("Ingrese expresión algebraica:\n");
scanf("%s", expresion);
printf("Expresión leída:\n%s\n\n", expresion);
break;
case 2 : // Revisión de paréntesis
top = 0;
ok = true;
printf("\nRevisión de paréntesis\n");
printf("Expresión a revisar:\n%s\n", expresion);
largo = strlen(expresion);
for (i = 0; i <= largo; i++)
{
if (expresion[i] == '(')
{
s[top+1] = expresion[i];
top++;
}
else
{
if (expresion[i] == ')')
{
top--;
if (top < 0)
ok = false;
}
}
imprimeCaracter(top);
}
if (top == 0 && ok)
printf("\nExpresión CORRECTA... %d\n\n\n", top);
else
printf("\n**>> Expresión NO correcta... %d <<**\n\n\n", top);
break;
default :
printf("\nOpción no válida...\n");
break;
}
printf("Opción: ");
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 expresión algebraica\n"
"2 : Revisión de paréntesis\n"
"3 : Salir del programa\n"
"----------------------------------------\n"
"\n");
return;
}
// Imprime despues de evaluar caracter de expresión
void imprimeCaracter(int top)
{
if (top == 0)
printf(" ");
else
{
if (top > 0)
printf(".");
else
printf("$");
}
return;
}