![]() |
LABORATORIO DE ESTRUCTURAS DE DATOS PRÁCTICAS CURSO 1996-97 1º INGENIERÍA INFORMÁTICA |
![]() |
(Semana del 20 de Marzo al 26 de Marzo de 1997)
Las unidades permiten en Turbo Pascal definir módulos con rutinas y datos que pueden ser construidos, compilados y modificados independientemente de cualquier programa que las use. La forma de construir estos módulos es propia del compilador Turbo Pascal de la empresa Borland y no es generalizable a otros compiladores. Sin embargo, en todos los compiladores de Pascal existe la posibilidad de definir de manera análoga módulos independientes (consultar en cada caso el manual del compilador).
El archivo con el código fuente de la unidad está compuesto por cuatro partes diferenciadas:
1) Cabecera:
UNIT nombre;Nota: el nombre dado a la unidad debe coincidir con el nombre del archivo que la contiene (sin '.pas').
2) Especificación de objetos (constantes, tipos, variables, procedimientos, funciones) que se definen y que podrán ser usados por los programas que utilizan la unidad:
INTERFACE definición de constantes, tipos y variables cabeceras de procedimientos y funciones3) Implementación de las rutinas definidas en Interface y de otras necesarias para su funcionamiento pero que son privadas del módulo y no pueden ser usadas desde programas externos. También es posible definir datos locales a la unidad.
IMPLEMENTATION Datos, procedimientos y funciones4) Sección de inicialización. Se especifican las acciones que es necesario realizar para iniciar correctamente, si es necesario, los datos que utiliza la unidad.
BEGIN acciones END.Ejemplo de unidad:
UNIT Operaciones; INTERFACE Function suma(a, b: integer): integer; Procedure resta(a, b:integer; var r: integer); IMPLEMENTATION Function suma(a, b: Integer): Integer; Begin suma := a + b End; Procedure resta(a, b: Integer; Var r: Integer); Begin r:= a - b End; BEGIN END.Para compilar una unidad y poder usarla desde otro programa, es necesario entrar en el menú de opciones del compilador e indicar como destino de la compilación el disco. De esta manera, al compilar correctamente la unidad, se generará un archivo en disco llamado igual que el nombre utilizado en la cabecera de la unidad y la extensión TPU, que contendrá el código binario de la unidad. Una vez creado el archivo TPU ya se puede utilizar esa unidad en cualquier programa mediante la sentencia USES nombre al principio del programa.
Como primera tarea en esta práctica se pide escribir un módulo en TP que especifique la representación en memoria y las operaciones asociadas con la estructura de datos Pila. Este módulo se debe diseñar de la forma más general posible, de manera que sea fácilmente adaptable a cualquier tipo de aplicación. Para facilitar su diseño, a continuación se indica como debe ser su estructura:
UNIT Pila; INTERFACE Const Tam_Max_Pila = .?. ; {Tamaño máximo del array que permite almacenar la información de la Pila} Type Valor = .?. ; {Especificar el tipo necesario para la aplicación}Pila = Record info: Array[1..Tam_Max_Pila] Of Valor; top : 0..Tam_Max_Pila; End; Procedure CREAR_PILA (Var P: Pila); Function VACIA_PILA ( P: Pila): Boolean; Function CIMA_PILA ( P: Pila): Valor; Procedure ELIMINAR_PILA (Var P: Pila); Procedure INSERTAR_PILA (Var P: Pila; x: Valor ); IMPLEMENTATION {... Escribir aquí el código de las operaciones anteriores ...}
Begin End.
La segunda tarea a realizar consiste en aplicar la unidad anterior en la resolución de un problema. Como ejemplo de utilización de la estructura de datos Pila, se propone la implementación de un programa que permita evaluar una expresión algebraica escrita en notación posfija. Se supone que esta expresión es introducida por el usuario del programa en forma de cadena de caracteres (longitud máxima 20) y que los operadores válidos son: '+', '-', '*' y '/'. Para simplificar, se puede suponer también que los datos numéricos que se introduzcan serán enteros de una sola cifra, aunque el resultado de la expresión puede ser un número real.
Ejemplo:
(Entrada proporcionada por el usuario)
45+7*8-6/(Equivale a (((4+5)*7)-8)/6 )
(Resultado proporcionado por el programa) 9.1666
En este programa hay que tener en cuenta que cualquier proceso de manipulación de la pila se debe realizar a través de las operaciones definidas en la unidad anteriormente diseñada, de forma que en el programa no aparezca ningún detalle que indique cómo se ha representado la pila. Las soluciones que no cumplan este requisito serán consideradas incorrectas.