101551509-tp-324

12
UNA_______________________________________________________Trabajo Práctico Computación II Estructura de Datos tipo Grafo (Diseño del trazado de rutas aéreas) Cargar rutas aéreas en archivo de texto Almacenar rutas en nodos tipo lista Buscar en lista país de salida Buscar en lista país de llegada Solicitud de país de salida y de llegada Trazado de ruta aérea

Upload: maite-marquez

Post on 21-Oct-2015

6 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: 101551509-TP-324

UNA_______________________________________________________Trabajo Práctico Computación II

Estructura de Datos tipo Grafo (Diseño del trazado de rutas aéreas)

Cargar rutas aéreas en archivo de texto

Almacenar rutas en nodos tipo lista

Buscar en lista país de salida

Buscar en lista país de llegada

Solicitud de país de salida y de llegada

Trazado de ruta aérea

Page 2: 101551509-TP-324

UNA_______________________________________________________Trabajo Práctico Computación II

Figura 1

T1

A1

S1

B1

B2

R1

Page 3: 101551509-TP-324

UNA_______________________________________________________Trabajo Práctico Computación II

TAD GRAFO

OPERACIÓN DESCRIPCIONLeer archivo texto Carga en memoria un archivo de texto con las

rutas aéreas.Cargar texto en lista Crea una lista con el contenido del archivo de

texto, almacenando en cada nodo las rutas aéreas.

Introducir país de salida y llegada

Carga el país de salida y de llegada

Localizar países en lista Busca los países en las rutas almacenadas en cada nodo de la lista

Trazar ruta de vuelo Calcula la ruta de vuelo con el menor numero de conexiones posibles

Leer archivo texto

Cargar texto en

lista

Introducir país de salida y

llegada

Localizar países en lista

Trazar ruta de vuelo

Grafo

Page 4: 101551509-TP-324

UNA_______________________________________________________Trabajo Práctico Computación II

MATRIZ ADYACENCIA

A =

0 1 0 0 0 0

0 0 0 1 1 0

0 0 0 1 1 1

0 1 1 0 1 0

0 0 1 1 0 1

0 0 1 0 1 0

1

2

3

4

5

6

1

2

3

4

56

Page 5: 101551509-TP-324

UNA_______________________________________________________Trabajo Práctico Computación II

TAD: Lista

Operaciones:

CrearLista: → ListaCrea una lista vacía.

Primero: Lista → PosicionDevuelve la posición del primer elemento de la lista.

Siguiente: Lista x Posicion → PosicionDada una posición p en la lista, devuelve la posición del elemento situado a continuación.

Dato: Lista x Posicion → TipobaseDada una posición en la lista, devuelve el dato que contiene.

Almacenar: Lista x Tipobase → ListaDado un dato e, lo añade a la lista como último elemento.

Buscar: Lista x Tipobase → PosicionDado un dato e, lo busca en la lista y devuelve la posición que ocupa.

Longitud: Lista → EnteroDada una lista, devuelve su longitud.

Trazar ruta: → Lista → Posicion → string Localiza el menor numero de conexiones entre el pais de llegada con el de salida

Page 6: 101551509-TP-324

UNA_______________________________________________________Trabajo Práctico Computación II

CODIGO FUENTE

{Desarrollado por ******************program aerolineas_LUXOR;uses crt;type vector= array[1..50] of string;

tnodo = ^nodo; nodo = record paises:string; ruta:integer; prox:tnodo; end;var i:integer; ftxt:text; aux1,aux2,lista:tnodo; cad,cad2:integer; linea,salida,llegada,op:string; v1,v2,v3:vector;{*******************************}procedure imprimirlista(lista:tnodo); var aux:tnodo; begin aux := lista; {nos situamos al principio de la lista} writeln('Imprimiendo estructura de datos..'); while (aux <> nil) do begin writeln(aux^.paises); aux:=aux^.prox; end; end;

{************************************************}procedure insertarnuevo(var l:tnodo; elem:string); var nuevo:tnodo; begin new(nuevo); nuevo^.paises:=elem; nuevo^.prox:= l; l:=nuevo; end;

{***********************************************}procedure cargarutas(var lista:tnodo); var archivo:text; x:string;

Page 7: 101551509-TP-324

UNA_______________________________________________________Trabajo Práctico Computación II

aux,aux2:tnodo; i:integer; begin i:=0; assign(archivo, 'c:\luxor\paises.txt'); reset(archivo); lista := nil; while not eof(archivo) do begin i:=i+1; readln(archivo, x);

new(aux); aux^.paises:= x; aux^.ruta:=i;

writeln('Ruta ',aux^.ruta,' ',x); delay(150);

if (lista = nil) then begin lista:=aux; aux2:=lista; end else begin aux2^.prox:=aux; aux2:=aux2^.prox; end; end;

aux2^.prox:=nil;

close(archivo); writeln; end;

procedure cabecera;begin clrscr; writeln; writeln('****** AEROlineas Luxor ******'); writeln; writeln('...... Control Rutas aereas ......'); writeln('..................................'); writeln; writeln('-> Cargando lista Rutas de vuelo...(paises.txt)'); delay(1000); writeln;

Page 8: 101551509-TP-324

UNA_______________________________________________________Trabajo Práctico Computación II

end;{**********************************************************}procedure HASH_llegada(var lista:tnodo; rutapos,celda:integer; salida,llegada:string);var q:tnodo; ciudad,cadena,scan:string; i,j,k,m,max,conex,sw,rutaposl,r1:integer;begin q:=lista; cadena:=''; ciudad:=''; j:=1; k:=1; sw:=0; while (q <> nil) do begin if (q^.ruta >= rutapos) then begin ciudad:=string(q^.paises); max:=length(ciudad); rutaposl:=q^.ruta;

for i:= 1 to max do begin cadena := cadena + ciudad[i]; if (ciudad[i] <= chr(32)) then begin if (cadena <> '') then begin v2[j]:=cadena; j:=j+1; cadena:=''; end; end; end;{for para armar las ciudades por separado} writeln; writeln('<--* Localizando pais de llegada: ',llegada,' en ruta: ',rutaposl); writeln;

for i:=1 to j do begin write(v2[i]); end; writeln;

for i:=1 to j do begin if (i >= celda) then begin

Page 9: 101551509-TP-324

UNA_______________________________________________________Trabajo Práctico Computación II

if (v2[i] = llegada+chr(32)) then begin writeln; writeln('***> Ubicado en el nodo ',i); writeln; r1:=q^.ruta; sw:=1; break; end else begin {cargando vector con las escalas} v3[k]:=v2[i]; k:=k+1; end; end; end;{for}

if (sw=0) then begin writeln; writeln('..No se encontro el pais de llegada en esta Ruta!'); writeln; end; delay(100);

end;{1 if} {limpiando vector v2} for i:=1 to j do v2[i]:=''; j:=1;

q:=q^.prox;

if (sw=1) then begin sw:=0; break; end; end;{end while} writeln('-> Posible ruta de viaje..'); writeln(' -----------------------'); writeln; writeln('Pais Salida ---> ', salida); writeln; writeln('-> (',k-1,') Escalas en: ','con las rutas: ',rutapos,' ',r1); writeln; for i:=1 to k do begin write(v3[i]);

Page 10: 101551509-TP-324

UNA_______________________________________________________Trabajo Práctico Computación II

end; writeln; writeln; write('Pais Llegada <--- ',llegada); writeln;end;{procedure}

{**********************************************************}procedure HASH_salida(var lista:tnodo; salida,llegada:string);var p:tnodo; ciudad,cadena,scan:string; i,j,k,m,max,conex,rutapos,sw,sw2,celda:integer;begin cabecera; writeln; p:=lista; j:=1; m:=1; conex:=0; k:=1; cadena:=''; ciudad:=''; sw:=0; sw2:=0; {buscando el pais de salida en la lista para saber a que ruta pertenece} while (p <> nil) do begin ciudad:=string(p^.paises); rutapos:=p^.ruta; max:=length(ciudad);

for i:= 1 to max do begin cadena := cadena + ciudad[i]; if (ciudad[i] <= chr(32)) then begin if (cadena <> '') then begin v1[j]:=cadena; j:=j+1; cadena:=''; end; end; end;{for para armar las ciudades por separado} writeln; writeln('--> Localizando pais de salida: ',salida,' en ruta: ',rutapos); writeln;

Page 11: 101551509-TP-324

UNA_______________________________________________________Trabajo Práctico Computación II

for i:=1 to j do begin write(v1[i]); end; writeln;

for i:=1 to j do begin if (v1[i] = salida+chr(32)) then begin writeln; writeln('***> Ubicado en el nodo ',i); writeln; celda:=i; sw:=1; sw2:=1; break; end else begin {cargando vector con las escalas v2[k]:=v1[i]; k:=k+1;} end; end;

if (sw2=1) then begin sw2:=0; HASH_llegada(lista,rutapos,celda,salida,llegada); break; end else begin if (sw=0) then begin writeln; writeln('..No se encontro el pais de salida en esta Ruta!'); writeln; end else begin sw:=0; end; delay(100); {limpiando vector v1} for i:=1 to j do v1[i]:=''; j:=1;

Page 12: 101551509-TP-324

UNA_______________________________________________________Trabajo Práctico Computación II

p:=p^.prox; end; end;{end while de la lista} writeln;end;

{*********************************************}procedure inicio;

begin cabecera;

cargarutas(lista);

writeln; write('-> Coloque el pais de Salida: ');readln(salida); writeln; write('-> Coloque el pais de Llegada: ');readln(llegada); writeln; writeln('-> Buscando posibles rutas...'); delay(1000);

HASH_salida(lista,salida,llegada);

end;

BEGIN{************************************* ppal}op:='s';while (op='s') or (op='S') dobegininicio;

{imprimirlista(lista);}

{**********************************************************************}writeln;{write('-> Presione la tecla <ENTER> para SALIR del programa..');readln;}write('PRESIONE tecla <S/s> para continuar <N/n> para salir del programa: ');readln(op);if (op='N') or (op='n') then break;end;{while ppal}END.