![]() |
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 funciones
3) 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 funciones
4) 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.