#include #include #include #include int valid=1; int i=0; //Variable usada como subindice para tomar los caracteres de la expresion int stacktop=0; // Variable apuntadora del arreglo pila char symb; // variable que almacena el simbolo leído char simb_apertura=' '; // Variable para comparar con symb char x; // variable para almecenar el dato sacado de la pila char pila[30]; // variable que representa la pila char expresion[30]; // variable para almacenar la expresion a evaluar solicitada por teclado void main() // iniciamos.. { clrscr(); // limpiamos pantalla cout<<"Ingrese la Expresion:";cin>>expresion; // pedimos al usuario la expresion a evaluar while (i<=strlen(expresion) && valid==1) // Mientras haya caracteres que leer y valid=1 { symb=expresion[i]; // lee el siguiente caracter de la expresion y lo almacena en symb if (symb=='[' || symb=='{' || symb=='(') // si symb es un simbolo de apertura { pila[stacktop]=symb;stacktop++; // insertar en la pila el symbolo de apertura } if (symb==']' || symb=='}' || symb==')') // si symb es un simbolo de cierre { if (stacktop==0) // pregunta si la pila esta vacía valid=0; // hace que valid sea 0 else // en caso contrario { stacktop--;x=pila[stacktop]; // saca de la pila el dato y lo deja en x switch (symb) // pregunta por symb para saber cual será su // correspondiente simbolo de apertura { case ']':simb_apertura='[';break; // asignando symbolos de apertura equivalente case '}':simb_apertura='{';break; case ')':simb_apertura='(';break; } if (x!=simb_apertura) valid=0; // si x sado de la pila es diferente a simbolo de // apertura que le corresponde entonces valid=0 } } i++; // incrementar i para que leer el siguiente caracter d ela expresion } if (stacktop!=0) valid=0; // si al final del ciclo stacktop es diferente de 0 hacemos valid=0 if (valid==1) cout<<"Cadena Válida"; // si valid=1 entonces desplegamos cadena válida else cout<<"Cadena No Válida"; // si valid=0 la cadena no será válida } // fin del void main()