PRÁCTICA NΊ2: 1 sesión

(Semana del 20 de Marzo al 24 de Marzo de 2000)

Gestión de información meteorológica mediante la utilización de pilas

0. OBJETIVOS

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. UNIDADES PARA LA ESPECIFICACIÓN DE LA ESTRUCTURA DE DATOS "PILA"

2.1. Forma secuencial

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

U_Pila_V;

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;

Cima: 0..Tam_Max_Pila;

End;

Procedure CREAR_PILA (Var P: Pila);

Procedure APILAR (Var P: Pila; x: Valor ): Boolean;

Procedure DESAPILAR (Var P: Pila ): Boolean;

Function CIMA_PILA ( P: Pila; Var x: Valor ): Boolean;

Function VACIA_PILA ( P: Pila ): Boolean;

IMPLEMENTATION

{... Escribir aquí el código de las operaciones anteriores ...}

BEGIN

END.

 

2.2. Forma enlazada (Variables dinámicas)

Como segunda tarea en esta práctica se pide escribir un módulo en TP similar al anterior pero con la utilización de variables dinámicas. 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

U_Pila_P;

INTERFACE

Type

Valor = .?. ; {Especificar el tipo necesario para la aplicación}

Ptro = ^Nodo;

Nodo = Record

Info: Valor;

Sig : Ptro;

End;

Pila = Record

Cima: ptro;

End;

Procedure CREAR_PILA (Var P: Pila);

Procedure APILAR (Var P: Pila; x: Valor ): Boolean;

Procedure DESAPILAR (Var P: Pila ): Boolean;

Function CIMA_PILA ( P: Pila; Var x: Valor ): Boolean;

Function VACIA_PILA ( P: Pila ): Boolean;

IMPLEMENTATION

{... Escribir aquí el código de las operaciones anteriores ...}

BEGIN

END.

 

3. Caso práctico 1: Gestión de predicciones meteorológicas en un aeropuerto.

La tercera tarea a realizar consiste en aplicar las unidades anteriores 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 almacenar expresiones literales (predicciones), con la siguiente especificación:

1. A lo largo de un día, y cada tres horas, se realiza una predicción meteorológica para el aeropuerto de Valencia. La primera predicción se realiza a las 00 horas y se va actualizando cada tres horas, es decir, se hacen un total de 8 predicciones diarias siendo válida la última que se ha hecho. Esta predicción se codifica en una línea de texto con una longitud máxima de 30 caracteres.

2. Un piloto, que vuela Madrid-Valencia, pide antes de la salida del vuelo, la última predicción actualizada (en nuestro caso la pedirá a las siguientes horas: 06:30, 13:30 y las 23:30).

3. Ese mismo día un inspector quiere comprobar la validez de la predicción hecha a diferentes horas.

4. Al final de cada día, y con objeto de crear una base de datos histórica, se graban las predicciones hechas en un fichero que contiene la hora de emisión y el contenido de la predicción. Este fichero tendrá por nombre, 2000 más el mes y el día, por ejemplo 20000313.dat, correspondería a las predicciones del 13 de Marzo de 2000. Para consultar la fecha actual en Pascal existe la funcion GetDate.

Las tareas a realizar serán las siguientes:

a.- Escribir una unidad para la especificación de la estructura de datos "Pila" (Forma secuencial).

b.- Escribir una unidad para la especificación de la estructura de datos "Pila" (Forma enlazada. Variables dinámicas).

Nota: Para ambas unidades se definirá el tipo Valor como:

Type

Valor = Record

Hora: Byte;

Pred: String[30];

End;

c.- Desarrollar un programa que pueda utilizar indistintamente cualquiera de las dos unidades para la resolución del caso práctico del apartado 4.

El programa principal consistirá en la realización de un menú donde se pueda hacer lo siguiente:

El subprograma ‘Pedir_Prediccion’ tiene la siguiente sintaxis:

Procedure Pedir_Prediccion ( Var pred: String[30]; Var hora: Byte );

Una predicción consistirá básicamente en un registro donde estará almacenada la hora en que se realizó la predicción y una cadena de caracteres que contendrá: La velocidad y dirección del viento en nudos, la visibilidad y finalmente la temperatura prevista.

4. Caso práctico 2: Gestión de las temperaturas horarias registradas en el observatorio de Valencia.

Un segundo caso práctico, consiste en modificar las definiciones de las unidades anteriores (modificar solamente la parte de CONST Y TYPE) y aplicarlas en la resolución del siguiente problema. Como ejemplo de utilización de la estructura de datos Pila, se propone la implementación de un programa que permita almacenar variables numéricas, con la siguiente especificación:

  1. A lo largo de un día, y cada hora, se registra la temperatura en ese momento. La primera medida se toma a las 00 horas y la última a las 23 horas, es decir, se hacen un total de 24 medidas. Este valor es un dato de tipo real con dos cifras decimales como máximo.
  2. Una emisora de radio, pide tres veces al día, la última medida registrada hasta el momento (en nuestro caso la pedirá a las siguientes horas: 07:15, 12:10 y las 18:15).
  3. Alrededor de las 23:30 horas se calcula la temperatura mínima, máxima y media de las registradas durante el día.
  4. A continuación, y con objeto de crear una base de datos histórica, se graban las temperaturas registradas en un fichero que contiene la hora, la temperatura registrada y los valores calculados de temperatura mínima, máxima y media. Este fichero tendrá por nombre, la letra T más el mes y el día, por ejemplo T0313.dat.

Las tareas a realizar serán las siguientes:

El programa principal consistirá en la realización de un menú donde se pueda hacer lo siguiente:

El subprograma ‘Pedir_Temperatura’ tiene la siguiente sintaxis:

Procedure Pedir_Temperatura ( Var temp: Byte; Var hora: Byte; Var minu: Byte );

3. Entrega de programas

Al finalizar la sesión de prácticas se entregarán al profesor dos programas principales en Turbo Pascal llamados: ‘Predic.pas’ y ‘Temper.pas’ que cumpla los requisitos reseñados en el enunciado de la práctica, así como las dos unidades para la implementación de pilas con vectores y con punteros llamadas ‘U_Pilas_V.pas’ y ‘U_Pilas_P.pas’.

 

NOTA: Se recuerda a los alumnos que las normas de corrección siguen vigentes y que por lo tanto se tendrán en cuenta a la hora de evaluar la práctica. Uno de los puntos es la presentación correcta de las prácticas siguiendo la Guía de Estilo de Pascal.

Recordar también la necesidad de entregar una hoja con las tareas que se van a realizar en la práctica para poder acceder al laboratorio.

 

ENTREGA DE PROGRAMAS: Al finalizar la sesión de prácticas correspondiente.