rendered paste bodyprogram turistico;
type
pedido = RECORD
apecli : string;
nomcli : string;
nomlug : string;
numpers : integer;
precio : real;
END;
pedidos = ^nodo_pedido;
nodo_pedido = RECORD
dato : pedido;
sig : pedidos;
END;
hotel = RECORD
nom : string;
precio : real;
capac : integer;
END;
hoteles = ^nodo_hotel;
nodo_hotel = RECORD
dato : hotel;
sig : hoteles;
END;
lugar = RECORD
nom : string;
dist : integer;
list : hoteles;
END;
lugares = ^nodo_lugar;
nodo_lugar = RECORD
dato : lugar;
izq : lugares;
der : lugares;
END;
PROCEDURE cargar_lugares (VAR arb_lug : lugares); {No se implementa, se dispone}
PROCEDURE cargar_pedidos (VAR lis_ped : pedidos); {No se implementa, se dispone}
PROCEDURE buscar_hotel (VAR lis_hot : hoteles; ped : pedido);
BEGIN
WHILE (lis_hot <> NIL) AND (ped.numpers > lis_hot^.dato.capac OR ped.precio > lis_hot^.dato.precio ) DO
lis_hot := lis_hot^.sig
END;
PROCEDURE buscar_lugar (VAR arb_lug : lugares; nomlug : string);
BEGIN
WHILE (arb_lug <> NIL) AND (arb_lug^.dato.nom <> nomlug) DO
BEGIN
IF (nomlug < arb_lug^.dato.nom) THEN
arb_lug := arb_lug^.izq
ELSE
arb_lug := arb_lug^.der
END;
END;
PROCEDURE proc_pedidos (VAR arb_lug : lugares; lis_ped : pedidos)
VAR
aux_lug : lugares;
aux_hot : hoteles;
BEGIN
aux_lug := arb_lug;
WHILE (lis_ped <> NIL) DO
buscar_lugar(aux_lug, lis_ped^.dato.nomlug);
IF (aux_lug <> NIL) THEN
aux_hot := aux_lug^.list;
buscar_hotel(aux_hot, lis_ped^.dato);
IF (aux_hot <> NIL) THEN
aux_hot^.dato.capac := aux_hot^.dato.capac - lis_ped^.dato.numpers;
WRITE ('Hotel asiganado:', aux_hot^.dato.nom);
ELSE
WRITE ('No se puede satisfacer el pedido');
ELSE
WRITE ('No se puede satisfacer el pedido');
lis_ped := lis_ped^.sig;
BEGIN
END;
END;
VAR
arb_lugares : lugares;
lis_pedidos : pedidos;
BEGIN
arb_lugares := NIL;
lis_pedidos := NIL;
cargar_lugares (arb_lugares);
cargar_pedidos (lis_pedidos);
proc_pedidos (arb_lugares, lis_pedidos);
END.