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) 

Divu dimensiju masīvi (array)

Lai gan Delphi valodā tiek atbalstīts masīvs ar neierobežotu dimensiju skaitu, mēs aplūkosim tikai divu dimensiju masīvu.

Ja atceramies masīva līdzību ar tabulu, tad vienas dimensijas masīvs ir kā tabula ar vienu rindu – līdz ar to, masīvu definējot, tika norādīts tikai kolonnu jeb šūnu skaits tajā (norādīt uz vienu esošo rindu nav nekādas nepieciešamības). Divu dimensiju masīvs, savukārt, ir salīdzināms ar jau vairāku rindu tabulu, piemēram:

1234
5678
9101112

To definē šādi:

var
M: array [1..3,1..4] of byte;

kur:

Ievērojiet, ka rindas no kolonnām atdala ar komatu!

Lai nolasītu vai piešķirtu vērtību kādam masīva elementam, ir jāuzrāda tā rindas un kolonnas indekss (līdzīgi, kā spēlējot spēli "kartupelis" vai "kuģīši"):

x:=M[1,2]; {mainīgais "x" iegūst masīva pirmās rindas otrās kolonnas elementa vērtību, t.i., "2"}
y:=M[3,2]; {mainīgais "y" iegūst masīva trešās rindas otrās kolonnas elementa vērtību, t.i., "10"}
M[3,4]:=12; {trešās rindas ceturtās kolonnas elementam piešķir vērtību "12", t.i., ieraksta masīvā}

Ja vienas dimensijas masīva aizpildīšanai vai nolasīšanai nereti lietoja ciklu, tad divu dimensiju masīvam parasti lieto divus ciklus (ciklu ciklā), kur viens padod rindas kārtas numuru (indeksu), bet otrs - kolonnas.

Uzdevums:

Nospiežot "OK" pogu, aizpildīt augstākminēto divdimensiju masīvu ar piemērā redzamajām vērtībām un pēc tam to secīgi izvadīt (piemēram, lābelī).

masivi2

procedure TForm1.Button1Click(Sender: TObject);
var M: array [1..3,1..4] of byte;
r,k,v :byte;
izv :string;
begin

{aizpildām}

v:=1; {mainīgā sākuma vērtība}
for r:=1 to 3 do {sākas 1.cikls. Secīgi tiek padots rindas indekss jeb numurs}
   for k:=1 to 4 do {sākas 2.cikls. Secīgi tiek padots kolonnas indekss}
   begin
     M[r,k]:=v; {atbilstošajā masīva elementā tiek ierakstīta "v" vērtība}
     v:=v+1; {pēc tam "v" vērtība palielinās par 1}
   end; {cikla robežas}
 
{izvadām tieši tāpat!}
izv:=' '; {mainīgā sākuma vērtība būs tukšums}
for r:=1 to 3 do
   for k:=1 to 4 do
     izv:=izv+inttostr(M[r,k])+' '; {mainīgais secīgi uzkrāj masīva vērtības, starp tām ievadot tukšumu}
 
label1.caption:=izv; {izvade lābelī}
end;

Paskaidrojums par masīva aizpildīšanas daļu:
Vispirms ievērosim cikla robežas - tas sākas ar pirmo "for" un beidzas ar lokālo "end". Cikla ideja bija, ka darbības nemitīgi atkārtojas pa apli, līdz cikla nosacījums netiek izsmelts. Tādējādi izpildāmo darbību secība ir sekojoša (LIKSIM MAINĪGO VIETĀ SKAITĻUS!!):

  1. r:=1 (sākas pirmais cikls)
  1. k:=1 (sākas otrais cikls, kas aizpildīs pirmās rindas (r=1) elementus, t.i., "r" visu laiku būs "1", kamēr "k" četras reizes secīgi nemainīs savu vērtību no "1" līdz "4", izsmeļot cikla nosacījumus)
  2. M[1,1]:=1 (M[r=1,k=1] ierakstās "v" vērtība, kas ir "1")
  3. v:=2 ("v" maina vērtību V=1(sākuma vērtība)+1)
  4. k:=2 (turpinās otrais cikls, JO TĀ NOSACĪJUMI VĒL NAV IZSMELTI!)
  5. M[1,2]:=2 ("v" pēdējā vērtība)
  6. v:=2+1
  7. k:=3 (turpinās otrais cikls)
  8. M[1,3]:=3
  9. v:=3+1
  10. k:=4 (turpinās otrais cikls)
  11. M[1,4]:=4
  12. v:=4+1
  1. r:=2 (tā kā otrā cikla nosacījumi ir izsmelti ("k" jau ir sasniedzis galējo nosacījumu - "k=4"), tad programma "paiet soli augstāk", jo tagad beidzot var atkal mainīties "r" vērtība)
  1. k:=1 (atkal sākas otrais cikls)
  2. M[2,1]:=5 (M[2,1] ierakstās "v" pēdējā vērtība, kas ir "5")
  3. v:=5+1
  4. k:=2
  5. M[2,2]:=6
  6. v:=6+1
  7. k:=3
  8. M[2,3]:=7
  9. v:=7+1
  10. k:=4
  11. M[2,4]:=8
  12. v:=8+1
  1. ...atkal otrā cikla nosacījumi ir izsmelti, r:=3, un pēdējo reizi atkal "izgriežas" otrā cikla "aplis", secīgi aizpildot trešās rindas elementus...



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