Beruflich Dokumente
Kultur Dokumente
ITCM-Estructura de Datos
/* La implementacin del mtodo queue [ } de la estructura de datos cola se basa en aritmtica modular para dar el efecto de cola circular*/ e. Una cadena constante puede contener smbolos de agrupacin y si tiene errores se deben saltar como en el siguiente ejemplo: String error = "El mtodo deque ( )) detect error de cola vaca"; 5. Realice una aplicacin, basada en pilas, que lea de teclado una cadena que representa una expresin en postfijo y produce el resultado de su evaluacin. Tome en cuenta lo siguiente: asuma que la expresin es correcta y que slo tiene operadores aritmticos binarios, los operandos son valores constantes, los operandos y operadores estn separados por espacio. Por ejemplo, para la cadena: 1 2 - 4 5 3 * 6 * 7 2 2 / se debe generar un -8. Siga el siguiente bosquejo algortmico.
1. Crear una pila para almacenar valores 2. Para cada carcter de la cadena que es una expresin en postfijo realizar: 3. Si el carcter es un operador: +, -, *, /, , entonces 4. Obtener dos operandos de la pila de valores 5. Aplicar el operador a los dos operandos extraidos 6. Almacenar el resultado en la pila de valores 7. sino, es un operando 8. almacenar el valor en la pila de valores 9. Regresar el contenido de la pila, ya que contiene el resultado final
6. Agregue a la aplicacin del punto anterior el mtodo infixToPostfix, el cual debe recibir una cadena que representa una expresin en infijo y producir como salida una expresin en postfijo. Presentacin de resultados a) Elabore un documento pdf que contenga una descripcin general de la prctica (un prrafo), bosquejo y algoritmo de los mtodos extractSymbols, checkBalance y infixToPostfix (ver inciso d de la seccin de ayuda) y los resultados de la prctica (para los puntos 1, 2, 3 y 4 muestre ejemplos de Entrada/Salida). b) Suba a la pgina del grupo, en el directorio correspondiente, un slo archivo en formato zip o rar que contenga: el documento pdf y archivos de la aplicacin (proyecto javanetbeans que incluya archivos de entrada, jar). c) Muestre a la profesora que los cdigos de la prctica funcionan. La profesora est disponibles en cualquiera de los siguientes horarios (lu-jue 13-14 hrs) o el viernes de 912 hrs o 18-20 hrs. Fecha de entrega: Lunes 19 de septiembre Nota: Los puntos 1, 4, 5 y 6 se deben hacer en casa. Los puntos 2 y 3 se deben terminar en el laboratorio y valen el 40% de su calificacin. . Ayudas a) Cdigo java que analiza si una cadena con smbolos de agrupacin esta balanceada
Balance.java
import DataStructures.*; public class Balance { public Balance(){ errors=0; } private boolean areMatching( char c1, char c2 ) { if( c1 == '(' && c2 != ')' || c1 == '[' && c2 != ']' || c1 == '{' && c2 != '}' ) { System.out.println( "Found: " + c2 + "; does not match with: " + c1); return false; } else return true; } public boolean checkBalance(String cad){ Stack s= new ArrayStack(); char ch; for (int i = 0 ; i < cad.length () ; i++){ ch=(cad.charAt(i)); if ((ch=='(') || (ch=='[') || (ch=='{')) s.push(cad.charAt(i)); else if ((ch==')') || (ch==']')|| (ch=='}')) if (s.isEmpty()) System.out.println("nothing matching with: "+ch); else if (!areMatching(new Character((Character)s.topAndPop()),ch)) errors++; }
ITCM-Estructura de Datos
if (!s.isEmpty()) { System.out.println("some opening symbols were never matched"); return false; } else return errors == 0 ; } private int errors; }
public class Main { public static void main( String [ ] args ) { if( args.length == 0 ) System.out.println( "No files specified" ); //The for-each loop is used to access each successive value in a collection of values. //The condition (type var : arr) is equivalent to (int i = 0; i < arr.length; i++) for( String fileName : args ) listFile( fileName ); } public static void listFile( String fileName ) { Scanner fileIn = null; System.out.println( "FILE: " + fileName ); try { fileIn = new Scanner( new FileReader( fileName ) ); while( fileIn.hasNextLine( ) ) { String oneLine = fileIn.nextLine( ); System.out.println( oneLine ); } } catch( IOException e ) { System.out.println( e ); } finally { // Close the stream if( fileIn != null ) fileIn.close( ); } } }
ITCM-Estructura de Datos
{ public static void main( String [ ] args ) { for( int i = 0; i < args.length - 1; i++ ) System.out.print( args[ i ] + " " ); if( args.length != 0 ) System.out.println( args[ args.length - 1 ] ); else System.out.println( "No arguments to echo" ); } }
Echo2.java (cdigo correcto, los smbolos de agrupacin no son importante en comentarios-largos) /*(Ejecute este codigo desde la linea de comandos Un ejemplo de ejecucin es: java Eco este aquel La variable args de main () atrapar estos valores))*/ public class Echo2 { public static void main( String [ ] args ) { for( int i = 0; i < args.length - 1; i++ ) System.out.print( args[ i ] + " " ); if( args.length != 0 ) System.out.println( args[ args.length - 1 ] ); else System.out.println( "No arguments to echo" ); } }
TestCeldaEntero1.java (cdigo incorrecto, falta una llave) public class TestCeldaEntero1 { public static void main (String [] args) CeldaEntero m = new CeldaEntero (); m.escribir (5); System.out.println ("Contenidos de la celda: " + m.leer ()); /*La siguiente lnea seria ilegal si no estuviera comentada porque valorAlmacenado es una componente privada/* } //m.valorAlmacenado=0; } TestCeldaEntero2.java (cdigo incorrecto, falta un corchete y una llave) //Ejercicio con la clase CeldaEntero public class TestCeldaEntero2 { public static void main (String [args) { CeldaEntero m = new CeldaEntero ();
ITCM-Estructura de Datos
m.escribir (5); System.out.println ("Contenidos de la celda: " + m.leer ()); // La siguiente lnea seria ilegal si no estuviera comentada //porque valorAlmacenado es una componente privada //m.valorAlmacenado=0; } TestCeldaEntero3.java (La cadena de salida es correcta, pero el cdigo es incorrecto porque falta un parntesis) //Ejercicio con la clase CeldaEntero public class TestCeldaEntero3 { public static void main (String [args]) { CeldaEntero m = new CeldaEntero (); m.escribir (5); System.out.println ("((Contenidos de la celda): " + m.leer )); // La siguiente lnea seria ilegal si no estuviera comentada //porque valorAlmacenado es una componente privada //m.valorAlmacenado=0; } } TestCeldaEntero4.java (El cdigo es correcto) public class TestCeldaEntero4 { public static void main (String [args]) { CeldaEntero m = new CeldaEntero (); m.escribir (5); System.out.println ("Contenidos de la celda: " + m.leer ()); // La siguiente lnea seria ilegal si no estuviera comentada //porque valorAlmacenado es una componente privada //m.valorAlmacenado=0; } }
ITCM-Estructura de Datos
Sino, si no corresponde el smbolo del tope de la pila con el smbolo actual Escribir mensaje de error Los smbolos no corresponden Incrementar el contador de errores Si la pila no est vaca entonces Escribir mensaje de error Algunos smbolos de apertura no tienen smbolo de cerradura Regresar falso Sino, si hubo errores Regresar falso Sino Regresar verdadero Algorithm checkBalance (X,n): Input: an array X of n symbols, each of which is a grouping symbol Output: true if all the grouping symbols in X match 1 Let S an empty stack 2 for i=1 to n 3 if X[i] {(, [, {} then 4 S.push(X[i]) 5 else if X[i] {), ], }} then 6 if S.isEmpty() then 7 write (nothing to match with+ X[i] 8 errors errors+1 9 else if not areMatching(s.popAndTop(),X[i]) then 10 errors errors+1 11 if not S.isEmpty() then 12 write (some opening symbols were never matched) 13 return false 14 else if errors =0 then return false 15 else return true Bosquejo del Algoritmo extractSymbols (archivo) Sean el conjunto de smbolos S={(, ), {, }, [, ], /, \}, un comentario-corto que se ubica en una lnea e inicia con //, y un comentario-largo que puede ocupar varias lneas y se encuentra delimitado por /* y */ Mientras el archivo tiene lneas Leer la siguiente lnea y almacenarla en una cadena Mientras no se llegue a la posicin final de la cadena actual Encontrar en la cadena actual la posicin del siguiente smbolo que pertenece a S Si existe un siguiente smbolo, ste es el actual Si no est prendida la bandera de comentario-largo en proceso Si el smbolo actual y el siguiente forman un comentario-corto Mover la posicin al final de la lnea Continuar ciclo Si el smbolo actual y el siguiente forman un inicio de comentario-largo Mover la posicin despus de los smbolos que forman el inicio del comentario-largo Prender bandera de comentario-largo en proceso Continuar ciclo Sino Si el smbolo actual y el siguiente son la terminacin de comentario-largo y bandera prendida Mover la posicin despus de los smbolos que forman el fin del comentario-largo Apagar bandera de comentario-largo en proceso Sino mover la posicin al final de la cadena actual