Welcome, guest! Login / Register - Why register?
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

Your Name: Code Language: