Advertisement
Guest User

Mezcla

a guest
Apr 9th, 2021
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.18 KB | None | 0 0
  1. program MezclaArchivos;
  2. type
  3.         tArchivo = text;
  4.         tComponente = string;
  5.  
  6. procedure LeerElemDetectandoFin(var arch:tArchivo;var comp: tComponente;var finArch: boolean);
  7. begin
  8.   finArch := EoF(arch);
  9.   if not finArch then
  10.      ReadLn(arch,comp);
  11. end;
  12.  
  13. procedure PasarElemDetectandoFin(var archOrigen,archDestino: tArchivo;var comp:tComponente;var finArchOrigen:boolean);
  14. begin
  15.   WriteLn(archDestino,comp);
  16.   LeerElemDetectandoFin(archOrigen,comp,finArchOrigen);
  17. end;
  18.  
  19. procedure Mezcla(var aux1, aux2, arch: tArchivo);
  20. var
  21.     c1,c2: tComponente;
  22.     finArch1,finArch2: boolean;
  23. begin
  24.   Reset(aux1);
  25.   Reset(aux2);
  26.   ReWrite(arch);
  27.   LeerElemDetectandoFin(aux1, c1, finArch1);
  28.   LeerElemDetectandoFin(aux2, c2, finArch2);
  29.   while (not finArch1) and (not finArch2) do
  30.      if c1 < c2 then
  31.         PasarElemDetectandoFin(aux1, arch, c1, finArch1)
  32.      else
  33.         PasarElemDetectandoFin(aux2, arch, c2, finArch2);
  34.   while not finArch1 do
  35.         PasarElemDetectandoFin(aux1, arch, c1, finArch1);
  36.   while not finArch2 do
  37.         PasarElemDetectandoFin(aux2, arch, c2, finArch2);
  38.   Close(arch);
  39.   Close(aux1);
  40.   Close(aux2)
  41. end;
  42.  
  43. procedure Division(var arch, aux1, aux2: tArchivo;var esVacio2:boolean);
  44. var
  45.    valorActual,valorAnterior: tComponente;
  46.    cambio:boolean;
  47. begin
  48.   Reset(arch);
  49.   ReWrite(aux1);
  50.   ReWrite(aux2);
  51.   cambio := True;
  52.   esVacio2 := True;
  53.   if not EoF(arch) then begin
  54.      ReadLn(arch,valorActual);
  55.      WriteLn(aux1,valorActual);
  56.      valorAnterior := valorActual;
  57.   end;
  58.   while not EoF(arch) do begin
  59.         ReadLn(arch,valorActual);
  60.         if valorAnterior > valorActual then
  61.            cambio := not cambio;
  62.         if cambio then
  63.            WriteLn(aux1,valorActual)
  64.         else begin
  65.            WriteLn(aux2,valorActual);
  66.            esVacio2 := False;
  67.         end;
  68.         valorAnterior := valorActual;
  69.     end;
  70.     Close(arch);
  71.     Close(aux1);
  72.     Close(aux2);
  73. end;
  74.  
  75. var arch,aux1,aux2: tArchivo;
  76.     esVacio2:boolean;
  77.  
  78. begin
  79.   Assign(arch,ParamStr(1));
  80.   Assign(aux1,ParamStr(2));
  81.   Assign(aux2,ParamStr(3));
  82.   repeat
  83.     Division(arch,aux1,aux2,esVacio2);
  84.     Mezcla(aux1,aux2,arch);
  85.   until esVacio2;
  86. end.
  87.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement