PRÁCTICA NΊ 1: 1 sesión
(del 6 de Marzo al 12 de Marzo de 1998)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 "VECTOR"
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 Vector. 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 Vector;
INTERFACE
Const Tam_Max_Vector = .?. ;
{Tamaño máximo del array que permite almacenar la información en el Vector}
Type Valor = .?. ;
{Especificar el tipo necesario para la aplicación}
Indice_Vector = 1..Tam_Max_Vector;
Nivel_Ocupacion = 0.. Tam_Max_Vector;
Vector = Record
info : array [ Indice_Vector ] of Valor;
n : Nivel_Ocupacion;
End;
Procedure CREAR_VECTOR ( Var V: Vector );
{Inicia el vector a vacio}
Function VACIO_VECTOR ( V: Vector ): Boolean;
{Devuelve True si el vector está vacio. Sino devuelve False}
Function TAMANO_VECTOR ( V: Vector ): Nivel_Ocupacion;
{Nos dice cuantos elementos válidos tiene el vector}
Procedure ALMACENAR_INFO (Var V: Vector; i: Indice_Vector; x: Valor );
{Almacena en la posición i del vector la información x}
Procedure INSERTAR_FINAL (Var V: Vector; x: Valor );
{Almacena la información x tras la última posición ocupada del vector}
Function RECUPERAR_INFO ( V: Vector; i: Indice_Vector ): Valor;
{Devuelve el valor contenido en la posición i del vector}
Procedure ELIMINAR_INFO ( Var V: Vector; i: Indice_Vector );
{Elimina el valor contenido en la posición i del vector}
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 dos problemas. La Criba de Eratóstenes y la Eliminación de elementos repetidos de un vector.
Criba de Eratóstenes
Como ejemplo de utilización de la estructura de datos Vector, se propone escribir un programa que implemente el método de obtención de números primos propuesto por Eratóstenes y conocido como la criba de Eratóstenes aplicado a los N primeros números naturales.
El método consiste, básicamente, en los siguientes pasos:
1.- Pedir el número N al usuario.
2.- Guardar los números que queremos cribar en un vector V_Original (desde 2 hasta N), e iniciar con el elemento 1 (que es primo por definición) un segundo vector V_Primos donde guardaremos los primos que vayamos obteniendo.
3.- Hacer
a.- El primer elemento, X, del vector V_Original es primo
b.- Eliminar del vector V_Original todos aquellos elementos que sean múltiplos de X.
c.- Poner X en el vector de elementos primos, V_Primos.
Mientras queden elementos en el vector V_Original.
4.- Mostrar por pantalla los elementos guardados en V_Primos
Eliminación de elementos repetidos de un vector
El segundo problema propuesto es la eliminación de todos los elementos repetidos que encontremos en un vector de M elementos generado aleatoriamente, utilizando la estructura vector y las funciones sobre vectores implementadas en la unidad.
Las tareas a realizar en este segundo programa son las siguientes:
1.- Pedir el valor M al usuario.
2.- Generar un vector aleatorio de M elementos, con valores enteros entre 0 y 50.
3.- Mostrar por pantalla los elementos del vector.
4.- Recorrer el vector en la forma que creas conveniente hasta eliminar todos los posibles elementos repetidos.
5.- Mostrar el vector resultante (vector original sin elementos repetidos) por pantalla.
En estos programas hay que tener en cuenta que cualquier proceso de manipulación del vector 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 el vector. Las soluciones que no cumplan este requisito serán consideradas incorrectas.
ENTREGA DE PROGRAMAS: Al finalizar la sesión de prácticas correspondiente.