UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) Formato para prácticas de laboratorio CARRERA PLAN DE ESTUDIO Ingeniero en Computación PRÁCTICA No. 2 CLAVE DE UNIDAD DE APRENDIZAJE NOMBRE DE LA UNIDAD DE APRENDIZAJE 12098 Algoritmos y Estructura de Datos 2009-1 LABORATORIO DE NOMBRE DE LA PRÁCTICA Algoritmos y Estructura de Datos DURACIÓN (HORAS) Pilas 2 1. INTRODUCCIÓN Las pilas son de estructuras de datos que son utilizadas por programas de aplicación, como por ejemplo un almacenar temporalmente datos. Es importante comprender el funcionamiento de las pilas para comprender el funcionamiento interno de otras aplicaciones que hacen uso de ellas. 2. OBJETIVO (COMPETENCIA) Elaborar un programa que utilice pilas en la solución de un problema mostrando creatividad para en la propuesta de la solución. 3. FUNDAMENTO La pila es una estructura lineal que recibe datos por un extremo y los retira por el mismo extremo, siguiendo la regla último elemento en entrar, primero en salir, conocida como LIFO (Last-IN FirstOUT). El comportamiento de una pila en estructura de datos es similar al comportamiento de una pila en el mundo cotidiano. Esto es, si se tiene una pila de diez libros, y se desea remover el quinto libro, se deben remover primero aquellos que se encuentran sobre el libro deseado. De lo contrario, la pila de libros corre el riesgo de derrumbarse. De manera similar, si se desea agregar un libro, esto se hace colocando el libro nuevo sobre el último libro que se agregó. El paquete java.util incluye una clase Stack la cual extiende a la clase Vector con cinco operaciones que permiten que un Vector se comporte como pila. Estas operaciones se implementan en los métodos: push(), pop(), empty(), peek() y search(). En el siguiente programa se muestra una forma de utilizar un Stack. Se crea un Stack y se guardan datos ahí con el método push(). Posteriormente, se extraen estos datos con el método pop(). Otra forma de declarar un Stack es como se muestra en el siguiente listado en la línea 8, esto es una clase parametrizada, quiere decir que sólo aceptará objetos del tipo de la clase que se especifica en la declaración del objeto Stack . Esta forma tiene la ventaja de que el compilador verifica que el tipo de los objetos que se guardan en pila sean de tipo Integer como se indicó en la declaración. Por esta razón, la línea 13 la señala como error NetBeans en este listado mientras que en el listado anterior, la misma línea es correcta. La descripción completa de la clase Stack se puede consultar en la liga de la referencia [1]. 4. PROCEDIMIENTO (DESCRIPCIÓN) A) EQUIPO NECESARIO MATERIAL Para realizar esta práctica se necesitará tener NetBeans instalado en la computadora, el compilador de Java y acceso a la Web. B) DESARROLLO DE LA PRÁCTICA 1. Se desea controlar la ejecución de un programa de manera que se tenga un reporte exhaustivo de las ejecuciones de los procesos que contiene el programa. De estas ejecuciones, se requiere el nombre del proceso. En caso de que exista un error, se debería informar con propiedad en qué parte ocurrió el error y todo el camino que ha afectado. Por ejemplo, si se tiene el siguiente programa: prog1 proc1 proc2 proc4 proc2 proc5 proc8 fin prog1 La ejecución correcta del mismo debería generar un reporte así : prog1 iniciado proc1 iniciado proc2 iniciado proc2 terminado proc1 terminado proc4 iniciado proc2 iniciado proc2 terminado proc5 iniciado proc5 terminado proc4 terminado proc8 iniciado proc8 terminado prog1 terminado Y salida: SUCCESSFULL Pero para una ejecución fallida, por ejemplo si el proc2 falla en la segunda llamada, el reporte del seguimiento deberá ser así: prog1 iniciado proc1 iniciado proc2 iniciado proc2 terminado proc1 terminado proc4 iniciado proc2 iniciado proc2 fallado proc4 fallado prog1 fallado Y salida: ABORT ERROR prog1:proc4:proc2 Escribir un programa que utilizando pilas simule la ejecución y falla de los procesos de un programa así como los reportes de ejecución. El programa generará hasta 8 procesos diferentes y dentro de cada uno de los procesos generará hasta 3 más. De forma aleatoria fallará o no alguno de los procesos, a partir de ahí todo fallará. El programa: a) Primero deberá mostrar la secuencia en la que se ejecutarán los procesos. Deberá indicar cuando los procesos se ejecutan dentro de otro proceso. b) Después deberá mostrar la ejecución y término o fallo de los procesos, indicando el anidamiento de los procesos como se mostró en el ejemplo. c) Finalmente deberá mostrar el reporte de seguimiento del programa. En caso de fracaso, el reporte deberá mostrar en orden los procesos que quedaron inclusos como se mostró en el ejemplo. 2. Escribir un programa en el que : a. Se acepten expresiones aritméticas en notación infijo. b. Se conviertan expresiones aritméticas de notación infijo a notación postfijo utilizando la clase Stack de Java. c. Se calcule el valor de la expresión utilizando la clase Stack de Java. d. Se muestre la expresión original, la expresión convertida y su resultado. Escribir un programa en el que : 3. a. Se acepten expresiones aritméticas en notación infijo. b. Se conviertan expresiones aritméticas de notación infijo a notación prefijo utilizando la clase Stack de Java. c. Se calcule el valor de la expresión utilizando la clase Stack de Java. d. Se muestre la expresión original, la expresión convertida y su resultado. 4. Escribir un programa en el que : a. Se acepten expresiones aritméticas en notación postfijo. b. Se conviertan expresiones aritméticas de notación postfijo a notación infijo utilizando la clase Stack de Java. c. Se calcule el valor de la expresión utilizando la clase Stack de Java. d. Se muestre la expresión original, la expresión convertida y su resultado. 5. Escribir un programa en el que : a. Se acepten expresiones aritméticas en notación prefijo. b. Se conviertan expresiones aritméticas de notación prefijo a notación infijo utilizando la clase Stack de Java. c. Se calcule el valor de la expresión utilizando la clase Stack de Java. d. Se muestre la expresión original, la expresión convertida y su resultado. C) CÁLCULOS Y REPORTE 5. RESULTADOS Y CONCLUSIONES 6. ANEXOS 7. REFERENCIAS [1] Java Stack class http://download.oracle.com/javase/6/docs/api/java/util/Stack.html [2] Notación de infijo http://es.wikipedia.org/wiki/Notaci%C3%B3n_de_infijo [3] Notación de postfijo http://es.wikipedia.org/wiki/Notaci%C3%B3n_de_postfijo [4] Notación de prefijo http://es.wikipedia.org/wiki/Notaci%C3%B3n_de_prefijo [5] Pilas http://es.wikipedia.org/wiki/Pila_(inform%C3%A1tica) Formuló Cecilia Curlango Rosas Gloria Chávez Valenzuela María Luisa González Ramírez Revisó Gloria Chávez Valenzuela Aprobó Autorizó Maximiliano de las Fuentes Lara Nombre y Firma del Maestro Nombre y Firma del Responsable de Programa Educativo Nombre y Firma del Responsable de Gestión de Calidad Nombre y Firma del Director de la Facultad