Įrašai Spausdinti
( 6 Votes )

Parašė Vidmantas Šarkys   

Galėjome įsitikinti, kaip patogu naudotis masyvu, kai norime turėti aibę tokio pat tipo kintamųjų. Tačiau ką daryti, jeigu mums reikia daugybės skirtingų tipų reikšmių? Galime sukurti daug masyvų. Arba galime sukurti įrašą. Įrašo kintamasis savyje talpina neribotą kiekį skirtingų, nebūtinai vienodo tipo reikšmių. Įrašas yra vienas sudėtingiausiai aprašomų aspektų paskalyje. Tiesa, naudojimas nėra sudėtingas, prisiminus masyvų ypatybes.

Sukurkime įrašo tipą.

program irasas;
type zmogus = record
    vardas : string[15];
    amzius : 0..120;
    ugis : real;  // Ūgis metrais
    svoris : integer // Svoris kilogramais
    end;
var Z : zmogus;
...

Įsivaizduokime, kad turime žmogaus duomenis, ir juos turėsime panaudoti programoje. Galėjome vardą, ūgį ir kitus duomenis aprašyti paprastais kintamaisiais, tačiau pasinaudojome įrašu ir netrukus pastebėjome, kad toks sprendimas mums atnešė daug naudos. Prisiminę masyvo aprašymą, pastebėsime nemažai panašumų įrašo aprašomojoje dalyje. Po "type" eina tipo pavadinimas, o vėliau - tipo rūšis. Šįkart tai įrašas, kurio angliškas žodinis atitikmuo - "record". Straipsnio pradžioje paminėjau, jog įraše galima sutalpinti skirtingo tipo kintamuosius, tad būtent tai aprašoma apačioje. Tam, kad būtų vaizdžiau pademonstruoti įrašo galimybes, visi kintamieji yra skirtingų tipų. Tariamo žmogaus vardui priskyrime sakinio tipo, jo amžiui nurodėme reikšmių atkarpą (tarkime, senesnio nei 120 metų žmogaus neturėsime), taip pat įtraukėme jo fizinius duomenis. Kai baigiame aprašinėti kintamuosius įraše, parašome "end;", kuris ir parodo, kad įrašas aprašytas pilnai. Galiausiai, kaip ir masyvo naudojime, turime įrašo tipą priskirti konkrečiam kintamajam, kuris talpinis visas reikšmes, esančias įrašo viduje. Šiuo atveju panaudojome kintamąjį "Z".

Apžvelkime tolesnį sukurto įrašo naudojimą.

...
Begin
WriteLn('Įveskite žmogaus vardą, amžių, ūgį ir svorį');
ReadLn(Z.vardas);
ReadLn(Z.amzius);
ReadLn(Z.ugis);
ReadLn(Z.svoris);
...

Programa paprašo vartotojo įvesti 4 duomenis apie žmogų. Duomenų nuskaitymą matome sekančiose eilutėse. Prisiminkime, kad įrašo tipą priskyrėme kintamajam "Z", kurį matome pastoviai kartojantis. Kiekvieną iš įrašo reikšmių nuskaitome po "Z" padėję tašką ir parašę tos kintamojo reikšmės, kurią nurime nuskaityti, pavadinimą, nurodytą įrašo aprašyme.

Nuskaitėme žmogaus duomenis. Dabar pasunkinkime sau užduotį. Tarkime, turime ne vieną žmogų, o keletą jų! Teks keisti programą iš pat pradžių. Naudosime įrašų masyvą, t.y. masyvą, kuriame bus skirtingų žmonių duomenys. Atidžiai apžvelkime į pavyzdį, kadangi jame panaudosime visa, ką išmokome iki šiol, tad iš pradžių gali būti sunku jį suprasti.

Program irasai;
type zmogus = record
    vardas : string[15];
    amzius : 0..120;
  end;
    mas = array[1..50] of zmogus;
var Z: mas;
     n, i : integer;
Begin
WriteLn('Kiek bus žmonių?');
ReadLn(n);
For i := 1 to n do
 Begin
  WriteLn('Įveskite ', i ,'-ojo žmogaus vardą ir amžių:');
  ReadLn(Z[i].vardas);
  ReadLn(Z[i].amzius);
 end;
...

Vardan trumpumo, sumažinome žmogaus duomenų kiekį, t.y. dabar nuskaitysime tik vardą ir amžių. Atkreipkime dėmesį į masyvo tipo aprašymą - jo kintamieji bus ne sveikojo ar realiojo, o įrašo tipo. Taigi turėsime tam tikrą kiekį įrašo tipo kintamųjų; kiekviename masyvo kintamajame bus dar dvi reikšmės.

Pirmiausiai mums reikia paklausti vartotojo, kiek žmonių jis norės aprašyti. Tą simbolizuoja reikšmė "n". Straipsnio apie masyvus pabaigoje apžvelgėme greito nuskaitymo, naudojantis ciklu, pavyzdį. Šiek tiek pakoreguotą jį turime ir čia. Jeigu turime "n" reikšmę 2, ciklas vyks 2 kartus. Kaskart jį atliekant, ekrane pasirodys raginimas įvesti 1-ojo, o vėliau 2-ojo (tai lems "i" reikšmė) žmogaus duomenis. Nuskaitome konkrečius duomenis. Kintamojo Z, esančio įrašų masyvo tipo reikšmes nuskaitome dviem sakiniais. Jei turime 2 žmones, iš viso skaitysime 4 duomenis: Pirmiausiai "Z[1].vardas", galiausiai - "Z[2].amzius". Jeigu kyla neaiškumų, prisiminkite masyvo ir įrašo savybes. 

Pasinaudodami įrašu su mūsų aprašyta salyga galime nuskaityti duomenis net apie 50 žmonių. Norint nuskaityti kiekvieno žmogaus vardą ir ūgį, mums tektų sukurti net 100 kintamųjų! Turbūt akivaizdu, kiek laiko sutaupėme panaudodami įrašą ir masyvą.