Masyvai Spausdinti
( 16 Votes )

Parašė Vidmantas Šarkys   

Apžvelgėme keletą programų pavyzdžių, kuriuose atliekami vienokie ar kitokie veiksmai su kintamaisiais. Įsitikinome, kad sukurti gerai programai gali prireikti ne vieno ir net ne dviejų kintamųjų. Gan dažnai jų kiekis būna itin didelis : kelios dešimtys, kartais net virš šimto. Tuomet kurti pavadinimus ir aprašinėti kiekvieną kintamąjį atskirai gali būti itin sudėtinga ir daugybės laiko reikalaujanti užduotis. Tokiais atvejais naudojami kintamųjų masyvai.

Masyvas - tai tipas, kuris leidžia vienam kintamajam priskirti tam tikrą kiekį reikšmių. Anksčiau minėjome, jog kintamojo tipą galime sukurti ir patys. Išnagrinėkime, kaip atrodo masyvo tipo sukūrimas ir to tipo priskyrimas kintamajam.

program m123;
type masyv = array[1..5] of integer;
var A : masyv;
    x : integer;
...

Anksčiau minėtuose pavyzdžiuose iškart po programos pavadinimo aprašydavome kintamuosius. Šį kartą pirmenybę teikti turime tipo aprašymui, kadangi, pagalvoję logiškai, pirmiausiai turime sukurti tam tikrą tipą, kad jį vėliau galėtume priskirti kintamiesiems, o ne atvirkščiai. Tipo aprašymas pradedamas žodeliu "type", vėliau seka norimas tipo pavadinimas, šiuo atveju, "masyv". Mūsų tikslas - sukurti sveikųjų skaičių masyvą, kurį sudarytų daugiausiai 5 reikšmės. Visą tai aprašome sekančiu sakinio fragmentu: "array" reiškia masyvą, laužtiniuose skliaustuose nurodome nuo kurios iki kurios reikšmės, arba, kiek išviso reikšmių norėsime turėti. Būtina pasirinkti, kokio tipo reikšmės bus mūsų masyve. Šiuo atveju turėsime sveikuosius skaičius, nors taip pat galime imti tiek realiuosius, tiek simbolius, tiek bet kokį kitą tipą.

Kągi, sukūrėme masyvo tipą. Tačiau jo panaudoti vis dar negalime - mums reikia tam tikro kintamojo, kuris "įkūnytų" mūsų sukurtąjį tipą. Pasirinkome kintamąjį "A", jam ir priskyrėme "masyv" tipą. Savaime aišku, jog rimtos programos su vienu kintamuoju nesukursime, todėl papildomai apsirašėme kintamąjį "x".

Masyvo naudojimas yra itin paprastas, tereikia nesusipainioti pavadinimuose ir nepamiršti masyvo ypatybių. Tęskime pavyzdinę programą, kurios fragmentą kątik apžvelgėme.

...
Begin
A[1] := 1;
A[2] := 11;
A[3] := 111;
A[4] := 1111;
A[5] := 11111;
WriteLn('Įveskite skaičių nuo 1 iki 5 :');
ReadLn(x);
Case x of 
1: WriteLn(A[1]);
2: WriteLn(A[2]);
3: WriteLn(A[3]);
4: WriteLn(A[4]);
5: WriteLn(A[5]);
else WriteLn('Blogas įvestas skaičius');
end;
ReadLn;
end.

Įsigilinę į pavyzdį turėjote nesunkiai suprasti, kaip naudojamos masyvo reikšmės. "A[1]" reiškia, jog turime masyvo "A" pirmąją reikšmę, "A[2]" - antrąją, ir t.t. Kiekvienas iš šių masyvo elementų - atskiras kintamasis, galintis neribotą kiekį kartų keisti savo reikšmę. Fragmento pradžioje priskyrėme visiems masyvo kintamiesiems reikšmes (atsminkime "[1..5]" masyvo tipo aprašyme), vėliau leidome vartotojui įvesti tam tikrą skaičių, nuo kurio ir priklausė, kuriągi reikšmę (ar tekstą) spausdinsime ekrane. Jeigu išnagrinėjote sąlyginių sakinių ir kintamųjų subtilybes, čia neaiškumų neturėjo kilti. 

Akivaizdu, jog programos fragmentas gavosi ilgokas. Sutrumpinkime jį.

...
Begin
A[1] := 1;
A[2] := 11;
A[3] := 111;
A[4] := 1111;
A[5] := 11111;
WriteLn('Įveskite skaičių nuo 1 iki 5 :');
ReadLn(x);
WriteLn(A[x]);
ReadLn;
end.

Fragmentų skirtumai atsiranda po sakinio "ReadLn(x)". Atsikratėme sąlyginio sakinio ir nutarėme iškarto rašyti reikšmę. Gali būti keblu suprasti, ką reiškia "WriteLn(A[x]);" - tarsi du kintamieji viename, ar ne? Įsivaizduokime, kad vartotojas įveda skaičių "2", t.y. "x" įgyją būtent tokią reikšmę. Sakinyje "WriteLn(A[x]);" mes kintamąjį "x" naudojame kaip masyvo elemento numerį. Tai tas pats, kaip "WriteLn(A[2]);". Šis sakinys išspausdins antrąjį masyvo elementą - 11. Toks kintamųjų naudojamas vietoj konkretaus numerio ypatingai pagreitina masyvo kintamųjų rašymą ar skaitymą. Tiesa, būtina prisiminti, jog šiuo atveju "x" turi būti tiktai sveikojo tipo. Juk, pavyzdžiui, "A[3.5]" elemento negali būti. 

Galiausiai, apžvelkime populiarų nuskaitymo algoritmą. Jis dažniausiai naudojamas dirbant su tekstiniais failais, bet šįkart įvedinėsime reikšmes.

...
Begin
For i := 1 to 10 do
ReadLn(B[i]);
...

Cikle "For" kintamojo "i" reikšmė nuolatos kinta - didėja vienetu po kiekvieno atlikimo. Iš pradžių "i" įgis reikšmę 1, t.y. nuskaitysime pirmąjį "B" masyvo elementą, vėliau antrąjį, trečiąjį, iki pat dešimtojo. Įsivaizduokime, kiek būtume užtrukę surašydami "ReadLn" ir nuskaitydami kiekvieną kintamąjį atskirai. Masyvas šiuo atveju ženkliai sutrumpino mūsų darbą.