SEM INF 23.2.2011

02.03.2011 19:18

Viacpáskové/viacpoľové/viacsúborové usporiadanie

    Dnes sme na hodine robili viacpáskové usporiadanie, ktoré sa používa, ak máme viac súborov(polí) ktoré už sú usporiadané a chceme ich usporiadať do jedného poľa, už usporiadaného. Vtedy vezmeme sa prvý prvok z poľa a a prvý prvok z poľa b, zistíme ktorý je menší, a ten vložíme na začiatok poľa c. Podľa toho z ktorého poľa bol ten prvok, ktorý sme vložili do poľa c, tak z neho potiahneme ďalší prvok, a znova ho porovnáme s tým prvkom, ktorý ta ostal. Takto to robíme, až kým nedôjdeme na koniec oboch polí a aj b.

***

program pasky;
uses Crt;
var a : array [1..1000] of integer;
      b : array [1..1000] of integer;
      c : array [1..1000] of integer;
      i,j,k,M,N,p : integer;
      vymena : boolean;

begin
  Clrscr;
  randomize;
  write('Zadaj pocet prvkov prveho pola: ');
  readln(M);
  write('Zadaj pocet prvkov druheho pola: ');
  readln(N);
  for i:=1 to M do a[i]:=random(100);
  for i:=1 to N do b[i]:=random(100);
  a[M+1]:=999;
  b[N+1]:=999;
  
  repeat
    vymena:=false;
    for i:=1 to M-1 do
      if a[i] > a[i+1] then
        begin
          p:=a[i]; a[i]:=a[i+1]; a[i+1]:=p;
          vymena:=true;
        end;
  until vymena=false;
  writeln;
  writeln('Prve pole: ');
  for i:=1 to M do write(a[i],' ');
  
  repeat
    vymena:=false;
    for i:=1 to N-1 do
      if b[i] > b[i+1] then
        begin
          p:=b[i]; b[i]:=b[i+1]; b[i+1]:=p;
          vymena:=true;
        end;
  until vymena=false;
  writeln; writeln;
  writeln('Druhe pole je: ');
  for i:=1 to N do write(b[i],' ');
  
  i:=1; j:=1; k:=1;
  repeat
    if a[i]<=b[j] then begin c[k]:=a[i]; i:=i+1; k:=k+1; end
                  else begin c[k]:=b[j]; j:=j+1; k:=k+1; end;
  until (a[i]=999) AND (b[j]=999);
  writeln; writeln;
  writeln('Usporiadane pole je: ');
  for i:=1 to M+N do
    write(c[i],' ');
  readln;
end.

***

Tento program je tu.
Aplikácia je tu.
Tento program pracoval na princípe: vygeneroval si 2 polia a a b, zadanej dĺžky. Potom ich vylepšenou bublinou usporiadal.  A potom cyklom repeat-until, robil to, čo je napísané na začiatku. Vzal prvok z poľa a aj z poľa b, a porovnal ich, potom ten menší dal do poľa c, potom vzal ďalší prvok z toho poľa odkiaľ bol ten vložený, a zase ho porovnal s tým prvkom čo tam ostal...

 


Koniec hodiny.

—————

Späť