Pilas y colas

Solo disponible en BuenasTareas
  • Páginas : 5 (1014 palabras )
  • Descarga(s) : 0
  • Publicado : 18 de noviembre de 2010
Leer documento completo
Vista previa del texto
Pilas-Colas y Matrices
* Evaluador de expresiones aritméticas "MiCalculadora"
MiCalculadora es un programa que utiliza clases y colecciones de Java para evaluar una expresión aritmética. Recibe como entrada un texto con la expresió aritmética a evaluar y retorna un texto con el valor resultante. Además, permite al usuario digitar varias expresiones aritméticas separados por punto y coma(;). Igualmente los resultados se muestran separados por punto y coma.
MiCalculadora ofrece la opcion de almacenar las expresiones en archivos textos. El usuario podrá abrir y guardar sus expresiones aritméticas en estos archivos.
MiCalculadora permite expresiones aritméticas con signos de agrupación (parentesis, llaves y corchetes) y números de varios digitos, por ejemplo: "[ ( 53 + 3 * 21 ) / 4]" cuyo resultado es 29
La clase StringTokenizer
Para entender esta clase es necesario tener claro los conceptos Token y Lexema. Un token es una palabra con un significado especial. Un lexema es la secuencia de caracteres que conforma el token. 
Por ejemplo: La expresion "[ ( 53 + 3 * 21 ) / 4 ]" esta conformado por los siguientes 11 tokens y lexemas (observe el espacio en blanco entretokens):
* el primer token es un corchete izquierdo cuyo lexema es "[",
* el segundo token es un parentesis izquierdo cuyo lexema es "(",
* el tercer token es un numero cuyo lexema es "53",
* el cuarto token es un operador cuyo lexema es "+",
* el quinto token es un numero cuyo lexema es "3",  
* el sexto token es un operador cuyo lexema es "*",
*el septimo token es un numero cuyo lexema es "21",
* el octavo token es un parentesis derecho cuyo lexema es ")",  
* el noveno token es un operador cuyo lexema es "/",
* el decimo token es un numero cuyo lexema es "4",
* el undecimo token es un corchete derecho cuyo lexema es "]"
Entonces, una expresión aritmética es una secuencia de tokens separados por unespacio en blanco. Esta es la función de StringTokenizer, ir entregando cada token del string de la expresion.
StringTokenizer entrega el lexema - string- del proximo token de la cadena sin importar el tipo de token. El programador debe definir el tipo de token de acuerdo al lexema.
Veamos el siguiente método que valida el emparejamiento de parentesis de la expresion aritmética. El método funciona dela siguiente manera: Se explora cada token de la expresion, si es parentesis izquierdo entonces lo metemos en la pila y si es un parentesis derecho, sacamos un elemento de la pila y emparejamos. Puede suceder que no empareje por dos razones: 1)queden parentesis izquierdo en la pila o 2) queden parentesis derecho en la expresion aritmetica.
public boolean validar(String entreOrden) {
*Stack<String> pila = new Stack<String>(); //La Pila guarda los parentesis izquierdo
* StringTokenizer enOrden = new StringTokenizer(entreOrden); //Creamos una cadena de tokens
* boolean swRegla = false; //True cuando rompe una regla de validación
* while (enOrden.hasMoreTokens() && !swRegla) {
* String token = enOrden.nextToken();  //Obtenemos untoken de la expresión
* if (token.equals("(")) {
* pila.push(token);
* } else {
* if (token.equals(")")) {
* if (pila.empty()) {
* swRegla = true;
* } else {
* pila.pop();
* }
* }
* }
* }
* if (swRegla) {
*//Se encontró un parentesis derecho sin parentesis izquierdo
* return false;
* } else if (!pila.empty()) {
* //Se encontró uno o más parentesis izquierdo sin parentesis derecho
* return false;
* } else {
* return true; //Emparejamiento de parentesis válido
* }
}
Observe que en este método se pregunta si el token es un...
tracking img