PRÁCTICA 4: 1 sesión

(Semana del 3 de abril al 7 de abril de 2000)

Gestión de una bolsa de trabajo

0. OBJETIVO:

1. ENUNCIADO DE LA PRÁCTICA

Una bolsa de trabajo no es más que una lista de espera a la que se incorporan personas sin trabajo, con unos ciertos méritos, y a la que pueden recurrir las empresas para seleccionar nuevo personal. En cada caso, la persona seleccionada por una empresa es aquella que reúne el mayor número de méritos. En esta lista de espera, también se suelen tener en cuenta criterios de temporalidad, es decir, a igual número de méritos se selecciona a la persona que lleva más tiempo en la bolsa de trabajo. Por tanto, una bolsa de trabajo se podría ver también como un tipo especial de cola, una cola en la que se tienen en cuenta criterios de prioridad. En este caso, cuando se incorpora un nuevo individuo a la cola, éste no tiene que añadirse en el último lugar del conjunto de todos los elementos, sino que debe incorporarse tras el último elemento de aquellos que tengan sus mismos méritos y, por tanto, delante de todos los individuos con méritos inferiores.

Una bolsa de trabajo se puede representar como una estructura secuencial de elementos (personas) ordenados según los méritos de cada uno de ellos. Cuando una empresa selecciona una persona siempre se escoge la que está en el primer lugar de la lista, que es la que posee más méritos y lleva más tiempo en ella. Cuando se añade un nuevo individuo a la bolsa de trabajo, es necesario localizar su posición correcta en la lista, ésta será siempre detrás del último elemento con méritos mayores o iguales que él (o lo que es lo mismo, delante del primer individuo que tenga menos méritos que el nuevo).

En esta práctica, lo que se pide es gestionar una bolsa de trabajo. Las operaciones de gestión a realizar serán las siguientes:

El programa a realizar se debe ajustar al siguiente esquema algorítmico:

Paso 0: Inicializar la bolsa de trabajo. En este paso se debe permitir leer los datos de un archivo (cualquiera) almacenado en disco o bien crear la lista vacía porque sea la primera vez que se trabaja con ella.

Paso 1: Gestionar la bolsa de trabajo.

Repetir

Paso 1.1: Mostrar por pantalla un menú de opciones:

1) Añadir una persona a la bolsa de trabajo

2) Dar trabajo a una o más persona de la bolsa

3) Dar de baja a una persona de la bolsa

4) Modificar los méritos de una persona

5) Mostrar por pantalla la bolsa de trabajo

6) Finalizar gestión

Paso 1.2: Seleccionar una opción

Paso 1.3: Si la opción está entre 1 y 5, realizar la acción especificada

Hasta que se seleccione la opción 6

Paso 2: Escribir, si se desea, en un archivo en disco el estado actual de la bolsa de trabajo.

Paso 3: Fin.

2. REALIZACIÓN DE LA PRÁCTICA

El problema se debe resolver modularmente, independizando completamente la resolución del problema (código en Pascal que reproduce el esquema anterior) de la representación particular escogida para simular la estructura de la bolsa de trabajo. Con este objetivo, se debe escribir un módulo independiente que contenga todas las definiciones de tipo y operaciones válidas para la estructura de la bolsa de trabajo. Este módulo se debe escribir en forma de una Unidad de Turbo Pascal y debe contener los siguientes elementos:

1) Definición de un tipo de datos PERSONA que especifique la información que es necesario almacenar sobre una persona que se incorpore a la bolsa de trabajo. Esta información comprenderá los siguientes datos personales: nif (9 caracteres), apellidos (25 caracteres, se considera un único campo de información para los dos apellidos), nombre (15 caracteres) y méritos (número entero entre 0 y 1000). En el programa principal se podrán definir variables de este tipo, asignar valores a sus campos o manipularlos de cualquier otra manera.

2) Definición de un tipo BOLSA que represente la estructura de la bolsa de trabajo. Se puede considerar que la bolsa de trabajo es una secuencia de elementos.

3) Operaciones definidas sobre el tipo BOLSA que pueden ser utilizadas desde el programa principal:

3.1) CREAR ( BOLSA ) ® BOLSA

Inicia como vacía una bolsa de trabajo.

3.2) PRIMERO ( BOLSA ) ® POSICIÓN

Devuelve la posición del primer elemento de la bolsa de trabajo.

3.3) ULTIMO ( BOLSA ) ® POSICIÓN

Devuelve la posición del último elemento de la bolsa de trabajo.

3.4) SIGUIENTE ( BOLSA , POSICIÓN ) ® POSICIÓN

Devuelve la posición del siguiente elemento de la bolsa de trabajo.

3.5) REC_PERSONA ( BOLSA , POSICIÓN ) ® PERSONA

Permite conocer los datos de la persona situada en una posición cualquiera de la bolsa.

3.6) INSERTAR ( BOLSA , PERSONA , POSICIÓN ) ® BOLSA

Añade a la bolsa de trabajo los datos de una persona en una posición determinada (en realidad se inserta delante de la posición, lo que ocurre es que, tras la inserción, el nuevo elemento ocupa la posición indicada inicialmente). Los datos de la persona son una entrada de la operación, no se pueden leer en el interior de esta rutina.

3.7) ELIMINAR ( BOLSA , POSICIÓN ) ® BOLSA

Borrar de la bolsa de trabajo los datos de la persona situada en una determinada posición.

3.8) MOSTRAR ( BOLSA )

Visualiza por pantalla los datos de todas las personas inscritas en la bolsa de trabajo. Esta operación debe utilizar una línea de texto por cada persona y hacer la visualización de manera que cuando se escriban todas las líneas de la pantalla se produzca una pausa hasta que el usuario pulse una tecla. De esta forma se pueden hacer legibles grandes listas de datos.

La implementación concreta de las funciones y procedimientos es la siguiente:

Procedure CREAR	      ( Var B: BOLSA                    );
Function  PRIMERO     (     B: BOLSA; Var POS: POSICION ): Boolean;
Function  ULTIMO      (     B: BOLSA; Var POS: POSICION ): Boolean;
Function  SIGUIENTE   (     B: BOLSA;     POS: POSICION ): POSICION;
Function  REC_PERSONA (     B: BOLSA;     POS: POSICION; VAR X: PERSONA ): Boolean;
Function  INSERTAR    ( Var B: BOLSA;     POS: POSICION;     X: PERSONA ): Boolean;
Function  ELIMINAR    ( Var B: BOLSA;     POS: POSICION ): Boolean;
Procedure MOSTRAR     (     B: BOLSA                    );

4) Definición de una constante llamada NULO que haga referencia a un valor especial del tipo POSICIÓN que se debe interpretar como 'ninguna posición'. Esta constante permitirá detectar situaciones tales como localizar el final de la estructura.

Todos los procesos de manipulación de la bolsa de trabajo (búsqueda, inserción, eliminación, modificación, etc.), que se lleven a cabo en el programa principal, deben utilizar exclusivamente las operaciones anteriormente definidas y ser independientes de la representación escogida. Por ello, se pide también comparar la eficacia de dos representaciones distintas de la bolsa de trabajo. Esta comparación se realizará mediante la utilización de dos Unidades de Turbo Pascal distintas, una que represente la bolsa de trabajo como una lista enlazada (simple), que debe diseñar el alumno, y otra que representa la lista con un vector, que se proporciona ya escrita. El archivo que contiene el módulo de representación de la bolsa de trabajo con un vector recibe el nombre 'U_BolV.tpu' y servirá de ejemplo sobre la forma de construir las operaciones en la representación enlazada. Asi mismo, se proporciona un archivo de datos de personas que permitirá generar una bolsa de trabajo suficientemente grande para probar el programa. Este archivo recibe el nombre 'ALUMNOS.DAT'.

3. Resumen del trabajo a realizar:

(i) Diseñar el programa de gestión de la bolsa de trabajo (bolsa.pas).

(ii) Crear un módulo que contenga las mismas operaciones y definiciones de la unidad 'U_BolV.tpu' pero considerando una representación enlazada de la lista (U_BolE.tpu).

(iii) Comparar la eficacia, durante la ejecución del programa anterior, de las dos unidades construidas.

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.