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

PRÁCTICA Nº 3: dos sesiones

(Semanas del 10 de Marzo al 23 de Abril de 1997)


SIMULACIÓN DEL COMPORTAMIENTO DEL TRÁFICO URBANO EN UN CRUCE CON CUATRO SEMÁFOROS


1. PLANTEAMIENTO DEL PROBLEMA

Simular el comportamiento del tráfico en un cruce urbano controlado por cuatro semáforos (ver la estructura del problema en la figura adjunta). Los vehículos pueden llegar a los cuatro semáforos en cualquier momento y pueden salir de ellos solamente cuando el semáforo correspondiente está abierto. Se supone que, en un instante determinado, se encuentran abiertos dos semáforos y cerrados los otros dos. El período de apertura de cada pareja de semáforos puede ser diferente y deberá ser una entrada del programa. Hay que tener en cuenta además, que el nivel de congestión del tráfico en cada uno de los semáforos (no de las parejas) puede ser diferente. Este dato también deberá ser una entrada del proceso.

El programa de simulación deberá responder al siguiente esquema algorítmico:

De este esquema se deduce que los tiempos Tj son en realidad el número de iteraciones de un bucle o, lo que es lo mismo, el número de vehículos que pueden salir cuando el semáforo está abierto. Por lo tanto, suponer que estos tiempos son números enteros comprendidos entre 0 (pareja de semáforos siempre cerrada) y 10 (tiempo suficiente para que salgan diez vehículos). En cuanto al nivel de congestión de cada semáforo (Ci), se debe tomar como valores de probabilidad de que llegue un vehículo al semáforo. Por ejemplo, si Ci=0 entonces nunca llegará un vehículo al semáforo, si Ci=100, en cada iteración del paso 2.2 llegará un vehículo al semáforo, si Ci=30 entonces habrá un 30% de probabilidades de que en una iteración en el paso 2.2 llegue un vehículo al semáforo, etc. (Nota: utilizar el generador de números aleatorios para este paso).

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 los semáforos. 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 los semáforo. Este módulo debe contener lo siguiente:
  1. ) Definición de un tipo VEHÍCULO que especifique la información relevante asociada con un vehículo. Para simplificar, suponer que esta información es sencillamente un número entero que indica el número de orden del vehículo sobre el total de vehículos que han llegado al semáforo durante el proceso de simulación.
  2. ) Definición de un tipo SEMÁFORO que especifique la representación en memoria de la estructura de datos que se asocia con un semáforo. En el programa principal se definirán cuatro variables de este tipo que representarán los cuatro semáforos del cruce.
  3. ) Definición de las siguientes operaciones asociadas al tipo SEMÁFORO:
Este módulo se debe compilar independientemente del programa en forma de unidad de Turbo Pascal (ver práctica 2). El programa principal hará uso de esta unidad. Sólo en el módulo anterior se puede "ver" la representación concreta de los datos, el programa principal se debe limitar a utilizar los tipos a través de las operaciones definidas anteriormente para su manipulación. Se valorará negativamente la incorrecta utilización de este tipo de datos.

La estructura de datos escogida para representar el tipo SEMÁFORO deberá ser del tipo Cola y su representación en memoria se hará mediante el constructor Array de Pascal.


3. PRESENTACIÓN DE RESULTADOS

La presentación de los resultados de la práctica se realizará al finalizar la última sesión de prácticas indicada anteriormente y constará de dos partes: por un lado, el código fuente del programa y la unidad realizada, por otro, una breve explicación escrita del trabajo realizado que describa principalmente, para qué sirve cada una de las funciones realizadas, qué datos se utilizan y como está organizado el programa principal.