Sākumlapa
"Pirmā web lapa"
HTML
CSS
Citi materiāli

Ceļošana - kalni


Lazarus (Delphi)

Ievads
Lazarus vide
Pirmā programma
Mainīgie
Globālie mainīgie
Teksta mainīgie
Veselie mainīgie
Decimālie mainīgie
Zarošanās (If)
Cikli - For
Cikls - While
Gadījuma skaitļi
Masīvi_1
Masīvi_2
Konsole
Darbs ar datnēm
Kārtošana (ievads)
Kārto (Burbulis)
Meklēšana (lineāri)

Vēl iesaku:

W3Schools
Krāsu palete

Pārlūku atbalsts CSS
 (1),   (2) 

Kārtošana - Burbuļa metode

Darbības princips - (piemēram, nesakārtotā masīvā) salīdzina pirmās divas vērtības. Ja pirmā ir lielāka par otro, tad tās tiek apmainītas vietām. Pēc tam salīdzina otro ar trešo utt., līdz vislielākā vērtība ir nonākusi beigās (varam teikt, ka pirmā piegājiena mērķis ir dabūt vislielāko vērtību uz pašām beigām).
Tādējādi pirmajā salīdzināšanas ciklā tiek salīdzinātas visas vērtības. Otrajā piegājienā ar pēdējo vairs nesalīdzina, jo ir zināms, ka tas ir vislielākais. Tātad otrā salīdzināšanas cikla mērķis ir dabūt otro lielāko vērtību uz priekšpēdējo pozīciju utt.
Salīdzināšanu veic tik ilgi, kamēr visas vērtības ir savās vietās.

Aplūkosim piemēru (kā divas vērtības apmainīt vietām, tika apskatīts nodaļā "Kārtošana (ievads)"). Zemāk dots masīva sākuma stāvoklis un sekojošās darbības viena pēc otras.

burbulis

Kodu šoreiz aplūkošu pa izstrādes soļiem, t.i., "kā darītu es". Varbūt kādam noder...

Tātad ideja ir, lai lietotājam nospiežot pogu, tiktu izvadīts sakārtots iepriekš minētais masīvs.

burbulis

1.solis. Izveidojam formu un programmas kodā nodefinējam masīvu kā konstanti. Uzreiz izveidojam izvades daļu, lai varētu "izķert kļūdas", ja tādas rastos. Mainīgais "i" darbojas kā uzkrājējs.

procedure TForm1.Button1Click(Sender: TObject);
const m:array[1..4] of byte=(4,8,1,2);
var i:string; a:byte;
begin

   {izvade}
   i:='';
   for a:=1 to 4 do i:=i+' '+inttostr(m[a]);
   label1.caption:='Burbulis: '+i;

end;

2.solis. Noprogrammējam maiņu, ja pirmā elementa vērtība izrādītos lielāka par otro. Ar "a" apzīmēsim masīva elementu (ja ļoti gribas izmēģināt koda darbību, tad sākumā varētu pievienot pagaidu rindiņu "a:=2;", lai redzētu kā nostrādā 2. un 3. elementa vērtību maiņa).Papildinām mainīgo sarakstu.

procedure TForm1.Button1Click(Sender: TObject);
const m:array[1..4] of byte=(4,8,1,2);
var i:string; a,p:byte;
begin

   if m[a]>m[a+1] then
   begin
   p:=m[a];
   m[a]:=m[a+1];
   m[a+1]:=p;
   end;

   {izvade}
   i:='';
   for a:=1 to 4 do i:=i+' '+inttostr(m[a]);
   label1.caption:='Burbulis: '+i;

end;

3.solis. Pievienojam maiņai ciklu, lai savā starpā tiktu salīdzinātas visas masīva vērtības. Ciklā "a" vērtība ir tikai līdz "3", jo "if-ā" 4.elementa vērtība tiek sasniegta ar "m[a+1]".

procedure TForm1.Button1Click(Sender: TObject);
const m:array[1..4] of byte=(4,8,1,2);
var i:string; a,p:byte;
begin

   for a:=1 to 3 do
   begin
      if m[a]>m[a+1] then
      begin
      p:=m[a];
      m[a]:=m[a+1];
      m[a+1]:=p;
      end;
   end;

   {izvade}
   i:='';
   for a:=1 to 4 do i:=i+' '+inttostr(m[a]);
   label1.caption:='Burbulis: '+i;

end;

4.solis. Diemžēl ar esošo vienu ciklu masīvs tiks "izskriets cauri" tikai vienu reizi un garantēti tikai viena, vislielākā vērtība nonāks pašās beigās. Pievienojam otru ciklu, kas liks "skriet cauri" masīvam, līdz visas vērtības būs salīdzinātas un masīvs būs sakārtots. Atbilstoši jāpamaina arī jau esošais cikls. Tādējādi tiek panākts, ka beidzamā, lielākā vērtība vairs netiek salīdzināta. Papildinām mainīgo sarakstu. Programma pabeigta!

procedure TForm1.Button1Click(Sender: TObject);
const m:array[1..4] of byte=(4,8,1,2);
var i:string; a,p,b:byte;
begin

{kārtošana}
for b:=4 downto 2 do
   for a:=1 to (b-1) do
   begin
      if m[a]>m[a+1] then
      begin
      p:=m[a];
      m[a]:=m[a+1];
      m[a+1]:=p;
      end;
   end;

{izvade}
i:='';
for a:=1 to 4 do i:=i+' '+inttostr(m[a]);
label1.caption:='Burbulis: '+i;

end;




Autortiesības © 2005-2011, kasis.lv. Visas tiesības aizsargātas.