TP1: Grafos 75.42 Taller de programación I Cátedra Azcurra Grupo Integrantes Fecha Entrega 1 Albarracín, Luis Alberto - 86901 Capristo, Matías Fernando - 87228 Korzeniewski, Claudia -85756 Pereira, Florencia 07/10/2009 TP1: Grafos Cátedra Azcurra Grupo 1 Indice INDICE .............................................................................................................................................. 1 CÓDIGO FUENTE ........................................................................................................................... 3 MENSAJES GENERADOS POR EL PARSER............................................................................. 4 ARCHIVO DE VÉRTICES ................................................................................................................... 4 ARCHIVO DE ARISTAS ..................................................................................................................... 6 DIAGRAMAS .................................................................................................................................... 9 DIAGRAMA DE CLASES .................................................................................................................... 9 DIAGRAMA DE SECUENCIA: CONSULTA DE CAMINO MÍNIMO ........................................................ 12 EJEMPLO ....................................................................................................................................... 13 Caminos más cortos .................................................................................................................. 15 Caminos más rápidos ................................................................................................................ 16 2/16 TP1: Grafos Código fuente 3/16 Cátedra Azcurra Grupo 1 TP1: Grafos Cátedra Azcurra Grupo 1 Mensajes generados por el Parser Al validar los archivos de vértices y aristas, el Parser genera mensajes de error o advertencia que se muestran en el archivo de errores. Archivo de Vértices El formato de línea es: IDVertice; X; Y Campo IDVertice X Y Tipo Cadena Real Real Obligatorio Si No No Único Si No No Valor por defecto 0 0 Descripción Identificador del vértice Posición X del vértice Posición Y del vértice Mensajes posibles Error: Línea <i>. No se ingresó el id del vértice. Descripción. Error crítico. No se carga el vértice. Ejemplo: “;0.2;0.2” Advertencia: Línea <i>. No se ingresó la posición X. La posición X por defecto será 0. Descripción. Error secundario. Se continúa con la carga del vértice. Ejemplo: “V1;;0.2” Advertencia: Línea <i>. Columna <j>. Posición X no válida. La posición X por defecto será 0. Descripción. Error secundario. Se continúa con la carga del vértice. Ejemplo: “V1;ff;0.2” Advertencia: Línea <i>. Columna <j>. Hay caracteres indeseados en la posición X. La posición X por defecto será 0. Descripción. Error secundario. Se continúa con la carga del vértice. Ejemplo: “V1;1.4d8;0.2” Advertencia: Línea <i>. No se ingresó la posición Y. La posición Y por defecto será 0. Descripción. Error secundario. Se continúa con la carga del vértice. Ejemplo: “V1;8” Advertencia: Línea <i>. Columna <j>. Posición Y no válida. La posición Y por defecto será 0. Descripción. Error secundario. Se continúa con la carga del vértice. Ejemplo: “V1;0;hh” Advertencia: Línea <i>. Columna <j>. Hay caracteres indeseados en la posición Y. La posición Y por defecto será 0. Descripción. Error secundario. Se continúa con la carga del vértice. Ejemplo: “V1;0;5f” Error: Línea <i>. vértice: <id>. El vértice que intenta agregar ya existe. Id del Descripción. Error crítico. El vértice no se carga. Ejemplo: “V1;0;1.2” “V1;-2;8” 4/16 TP1: Grafos Cátedra Azcurra Grupo 1 Error: Línea <i>. No hay memoria suficiente. Descripción. Error crítico. El vértice no se carga. Error: Línea <i>. El vértice no se carga por falta de datos. Descripción. Error crítico. Mensaje que confirma que el vértice no se carga ya que no se ingresaron los datos obligatorios. Ejemplo: “;0;0” Advertencia: Línea <i>. Línea vacía. Descripción. Error secundario. Advertencia sobre una línea sin datos en el archivo. 5/16 TP1: Grafos Cátedra Azcurra Grupo 1 Archivo de Aristas El formato de línea es: IDArista; IDVerticeOrigen; IDVerticeDestino; Longitud (metros); velocidadMaxima (km/h) Campo Tipo Obligatorio Único Valor por defecto IDArista IDVerticeOrigen Cadena Cadena Si Si Si No IDVerticeDestino Cadena Si No Longitud Real No No 100 velocidadMaxima Real No No 40 Descripción Identificador de la arista Identificador del vértice origen Identificador del vértice destino Longitud de la arista en metros Velocidad máxima de la arista en km/h Mensajes posibles: Error: Línea <i>. No se ingresó el id de la arista. Descripción. Error crítico. No se carga la arista Ejemplo: “;V1;V2;100;40” Error: Línea <i>. No se ingresó el vértice origen de la arista. Descripción. Error crítico. No se carga la arista Ejemplo: “A1;;V2;100;40” Error: Línea <i>. No se ingresó el vértice destino de la arista. Descripción. Error crítico. No se carga la arista Ejemplo: “A1;V1;;100;40” Advertencia: Línea <i>. No se ingresó la longitud de la arista. La longitud por defecto será 100 metros. Descripción. Error secundario. Se continúa con la carga de la arista Ejemplo: “A1;V1;V2;;40” Advertencia: Línea <i>. Columna <j>. Longitud de arista no válida. La longitud por defecto será 100 metros. Descripción. Error secundario. Se continúa con la carga de la arista Ejemplo: “A1;V1;V2;rr;40” Advertencia: Línea <i>. Columna <j>. Hay caracteres indeseados en la longitud de la arista. La longitud por defecto será 100 metros. Descripción. Error secundario. Se continúa con la carga de la arista Ejemplo: “A1;V1;V2;ss150;40” Advertencia: Línea <i>. Columna <j>. Longitud negativa. La longitud por defecto será 100 metros. Descripción. Error secundario. Se continúa con la carga de la arista Ejemplo: “A1;V1;V2;-50;40” Advertencia: Línea <i>. No se ingresó la velocidad máxima de la arista. La velocidad máxima por defecto será 40 km/h. Descripción. Error secundario. Se continúa con la carga de la arista Ejemplo: “A1;V1;V2;100” 6/16 TP1: Grafos Cátedra Azcurra Grupo 1 Advertencia: Línea <i>. Columna <j>. Velocidad máxima de arista no válida. La velocidad máxima por defecto será 40 km/h. Descripción. Error secundario. Se continúa con la carga de la arista Ejemplo: “A1;V1;V2;100;pp” Advertencia: Línea <i>. Columna <j>. Hay caracteres indeseados en la velocidad máxima de la arista. La velocidad máxima por defecto será 40 km/h. Descripción. Error secundario. Se continúa con la carga de la arista Ejemplo: “A1;V1;V2;100;5f0” Advertencia: Línea <i>. Columna <j>. Velocidad máxima negativa. La velocidad máxima por defecto será 40 km/h. Descripción. Error secundario. Se continúa con la carga de la arista Ejemplo: “A1;V1;V2;100;-10” Advertencia: Línea <i>. Columna <j>. Velocidad máxima igual a cero. La velocidad máxima por defecto será 40 km/h. Descripción. Error secundario. Se continúa con la carga de la arista Ejemplo: “A1;V1;V2;100;0” Error: Línea <i>. No se ingresó el vértice destino, la longitud y la velocidad máxima para la arista. Descripción. Error crítico. No se carga la arista. Ejemplo: “A1;V1” Error: Línea <i>. No se ingresaron los vértices origen y destino, la longitud y la velocidad máxima para la arista. Descripción. Error crítico. No se carga la arista. Ejemplo: “A1” Advertencia: Línea <i>. La longitud de la arista es menor a la distancia de los vértices que une. La longitud será <longitud>. Descripción. Error secundario. Se continúa con la carga y se asigna la longitud mínima entre los vértices que une la arista. Ejemplo: vértices: “V1;0,0” y “V2;100;100” arista: “A1;V1;V2;20;40” Error: Línea <i>. La arista que intenta agregar ya existe .Id de la arista: <id>. Descripción. Error crítico. No se carga la arista. Ejemplo: “A1;V1;V2;” y “A1;V3;V9” Error: Línea <i>. El vértice origen no existe. Id del vértice: <id>. Descripción. Error crítico. No se carga la arista. Error: Línea <i>. El vértice destino no existe. Id del vértice: <id>. Descripción. Error crítico. No se carga la arista. Error: Linea <i>. No hay memoria suficiente. Descripción. Error crítico. No se carga la arista. 7/16 TP1: Grafos Cátedra Azcurra Grupo 1 Error: Línea <i>. La arista no se carga por falta de datos. Descripción. Error crítico. Mensaje que confirma que la arista no se carga porque no se ingresaron los datos obligatorios. Ejemplo: “;;;;0” Advertencia: Línea <i>. Línea vacía. Descripción. Error secundario. Advertencia sobre una línea sin datos en el archivo. 8/16 TP1: Grafos Cátedra Azcurra Grupo 1 Diagramas Diagrama de clases general para la primera entrega La arquitectura del trabajo práctico se define por una estructura Grafo que se compone de una lista de Aristas y una lista de Vértices. Los datos del grafo se almacenan en el datoV y datoA. La información a ingresar proviene de archivos de texto plano, que la clase Parser se encarga de recorrerlos, cargar en el Grafo y emitir los errores correspondientes en otro archivo de texto denominado “errores.txt”. El servicio de obtener los caminos mínimos, desde un vértice origen hasta un vértice destino, dentro del Grafo, es brindado por el Dijkstra. Los caminos a recorrer el grafo pueden elegirse por longitud o distancia, y por tiempo en base a la velocidad permitida. La vista es la clase que nos provee recorrer el grafo, obtener los datos necesarios del mismo y emitirlos por consola. La clase Menu es la administración de las opciones que puede utilizar el usuario. Cuando esta clase invoca a obtener los caminos minimos, mediante Dijkstra, la vista obtiene todos los datos de los recorridos parciales y totales y los imprime por pantalla. Diagrama de clases de Dijkstra Se calcula el camino mínimo en base a la Longitud o al tiempo que se tarda, en recorrer un camino específico. 9/16 TP1: Grafos Cátedra Azcurra Grupo 1 Diagrama de clases de los Comparadores utilizados por el Dijkstra Los datos por los que se compara a la hora de calcular el camino mínimo es por Longitud o Tiempo. La longitud tiene unidades en metros [m], y el tiempo en [h] horas, con lo cual utilizamos la velocidad máxima permitida para calcular el mínimo tiempo en recorrer un determinado camino. V= L/ t L: Longitud, t: Tiempo iempo. 10/16 TP1: Grafos Cátedra Azcurra Grupo 1 Diagrama de clases de Excepciones Las excepciones son invocadas por el Grafo y utilizadas por el Parser, en el momento de almacenar la información en el mismo, que proviene de los archivos cargados por el usuario. 11/16 TP1: Grafos Cátedra Azcurra Diagrama de secuencia: consulta de camino mínimo 12/16 Grupo 1 TP1: Grafos Cátedra Azcurra Ejemplo Para el siguiente grafo: Los archivos de texto ingresados al programa se encuentran en el cd. Se obtuvieron los siguientes caminos mínimos : 13/16 Grupo 1 TP1: Grafos 14/16 Cátedra Azcurra Grupo 1 TP1: Grafos Cátedra Azcurra Caminos más cortos 15/16 Grupo 1 TP1: Grafos Cátedra Azcurra Caminos más rápidos 16/16 Grupo 1