LABORATORIO DE ESTRUCTURAS DE DATOS
PRÁCTICAS CURSO 1996-97
1º INGENIERÍA INFORMÁTICA

PRÁCTICA Nº 2: una sesión

(Semana del 20 de Marzo al 26 de Marzo de 1997)


1. LAS UNIDADES DE TURBO PASCAL

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.

2. UNIDAD PARA LA ESPECIFICACIÓN DE LA ESTRUCTURA DE DATOS "PILA"

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.

3. COMPROBACIÓN DE LA UNIDAD

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.

ENTREGA DE PROGRAMAS:

Al finalizar la sesión de prácticas correspondiente