Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted by ignacio vacca ( 15 years ago )
program entrega3; {version con enumerativo}
const corte='nul';
Type
r_destino=1..3;
tdestino=(Paris, Madrid, Londres, otro); {1: Paris 2:Madrid 3:Londres 4:otro (centinela)}
str=string[15];
pasajero= record
apellido:str;
nombre:str;
destino:tdestino;
end;
l=^lista;
lista=record
dato:pasajero;
sig:l;
end;
{Se devuelve un enumerativo segun el numero que se recibe}
Function FdestinoEnu (car:char):tdestino;
Begin
case car of
'1':FdestinoEnu:=Paris;
'2':FdestinoEnu:=Madrid;
'3':FdestinoEnu:=Londres;
else
FdestinoEnu:=otro;
end;
end;
{Se recibe un enumerativo y devuelve su equivalente en string}
Function FdestinoStr (x:tdestino):str;
begin
case x of
Paris:FdestinoStr:= 'Paris';
Madrid:FdestinoStr:= 'Madrid';
Londres:FdestinoStr:= 'Londres';
end;
end;
{Se leen los campos del registro pasajero}
procedure leerpasajero (var r:pasajero);
var
car:char;
begin
with r do begin
writeln;
write ('Apellido: ');
readln(apellido);
if (apellido<>corte) then begin
write ('Nombre: ');
readln (nombre);
writeln;
writeln ('Destinos posibles 1: Paris 2: Madrid 3: Londres');
writeln ('Ingrese el numero del destino');
write ('Destino: ');
readln (car);
destino:= FdestinoEnu(car);
writeln('----------------------------------------------------------');
end;
end;
end;
{Este procedimiento devuelve un registro pasajero con uno de los destinos posibles, por si se ingresa un destino no especificado}
procedure RegPasajero (var r:pasajero);
begin
leerpasajero(r);
while (r.apellido<>corte) and (r.destino=otro) do begin
writeln('Destino inválido, ingrese nuevamente el registro');
leerpasajero(r);
end;
end;
{Se agrega al final de la lista, en forma de cola}
procedure agregar (r:pasajero; var pri,ult:l);
var
nue:l;
begin
new (nue);
nue^.sig := nil;
nue^.dato:= r;
if (pri = nil) then
pri := nue
else
ult^.sig := nue;
ult := nue;
end;
{Se agrega en la lista de manera ordenada}
procedure agregarordenado (r:pasajero;var pri:l);
var
nue,act,ult:l;
begin
new(nue);
nue^.dato:=r;
nue^.sig:=nil;
act:=pri;
ult:=pri;
while (act<>nil)and(act^.dato.apellido<nue^.dato.apellido) do begin
ult:=act;
act:=act^.sig;
end;
if (act=ult) then
pri:=nue
else
ult^.sig:=nue;
nue^.sig:=act;
end;
{proceso crear lista -inciso a-}
procedure crearlista (var pri:l);
var
r:pasajero;
ult:l;
begin
pri:=nil;
RegPasajero(r);
while (r.apellido<>corte) do begin
agregar(r,pri,ult);
RegPasajero(r);
end;
end;
{proceso lista ordenada -inciso c-}
procedure listaordenada (var first:l);
var
r:pasajero;
begin
first:=nil;
RegPasajero(r);
while (r.apellido<>corte) do begin
agregarordenado (r,first);
RegPasajero(r);
end;
end;
{proceso para imprimir -inciso b y d-}
procedure imprimir (lis:l);
begin
writeln;
writeln('*************** L I S T A ****************');
writeln(' |');
while(lis<>nil)do begin
writeln(' |');
writeln(' |');
writeln('Apellido:',lis^.dato.apellido);
writeln('Nombre: ',lis^.dato.nombre);
writeln('Destino: ',FdestinoStr(lis^.dato.destino));
writeln(' |');
writeln(' |');
writeln('------------------------------------------');
lis:=lis^.sig;
end;
end;
{Procedimiento que cuenta los pasajeros que van a "x" destino de los 3 posibles}
Function cantpasajeros (x:tdestino ; act:l):integer;
var
cant:integer;
begin
cant:=0;
while (act<>nil) do begin
If (act^.dato.destino=x) then
cant:=cant+1;
act:=act^.sig;
end;
cantpasajeros:=cant;
end;
{Se calcula cuantos viajan a un destino determinado el cual es leido en el proceso-inciso e-}
Procedure cuantosviajan (act:l);
var
dest:tdestino;
car:char;
begin
writeln ('Ingrese el N° del destino al cual quiere calcularle los pasajeros que viajan');
writeln ('1: Paris 2: Madrid 3: Londres');
write ('Destino: ');
Readln(car);
dest:=FdestinoEnu(car);
if (dest<>otro) then
writeln ('La cantidad de pasajeros que viajan a: ', FdestinoStr(dest),' ,son: ',cantpasajeros(dest,act))
else
writeln('Destino invalido');
end;
{programa principal}
var
pri1,pri2:l;
begin
crearlista(pri1);
imprimir(pri1);
listaordenada(pri2);
imprimir(pri2);
cuantosviajan(pri2);
readln;
readln;
end.
Revise this Paste