1.2.3.5. Indexované premenné (polia)

 

Dôvodom pre zavedenie indexovaných premenných je snaha uľahčiť prácu s dátami. Vysvetlíme si, čo to vlastne je.

Chceme označiť každý deň v roku. Môžeme to urobiť takto:

d(1), d(2), d(3), ..., d(365)

Použili sme označenie písmenom d, za ktorým je v okrúhlych zátvorkách uvedené poradové číslo dňa v roku. Číslu v zátvorkách budeme hovoriť index. Jednotlivé značenia dni sa líšia od seba len hodnotou indexov, písmeno d je spoločné.

Podobne by sme mohli označiť dni v roku tak, že v zátvorke budú dve čísla oddelené čiarkou. Prvé číslo označuje mesiac, druhé deň v mesiaci.

Napr. d(5,20) označuje 20-ty deň v piatom mesiaci.

Hovoríme, že indexované premenné, ktoré majú to isté označenie, tvoria pole. Jednotlivé indexované premenné z tohto poľa nazývame prvkami tohto poľa. Každý prvok poľa je určený menom poľa a svojou pozíciou v poli, pozícia je určená hodnotou indexov prvku.

Meno poľa môže byť len jedno písmeno, za meno sa do okrúhlych zátvoriek udávajú rozmery jednotlivých dimenzií (t. j. maximálne hodnoty indexov, ktoré môžu byť pri označení prvkov tohto poľa použité). Indexy môžu byť len celé čísla väčšie ako 0 (1,2,3,..), oddeľujú sa od seba čiarkou.

Správne označené indexované premenné sú:

      b(3,3),y(10)

Nesprávne označené indexované premenné sú:

      q(4;2), c(1,0), d(-1,-1).

Ak chcete použiť pole dát, musíte počítaču oznámiť, ako sa bude pole volať a aké bude mať rozmery. Na to sa používa príkaz DIM. Tento príkaz musíte použiť pred prvým použitím prvku tohto poľa (nikdy nepracujeme s poľom ako s celkom, ale vždy iba s prvkom poľa). Príkazom DIM sa rezervuje v pamäti počítača miesto pre jednotlivé prvky:

      10 DIM a(10)

      20 DIM b(4,5)

Príkaz DIM na riadku 10 rezervuje v pamäti miesto pre číselné pole, ktoré má 10 prvkov a(1), a(2), ..., a(10) a hodnoty prvkov sú nastavené na 0. Zároveň zruší akékoľvek pole a, ktoré bolo definované skorej.

Príkaz DIM na riadku 20 rezervuje v pamäti miesto pre číselné pole, ktoré má 4x5 prvkov:

      b(1,1), b(1,2), ..., b(1,5)

      b(2,1), b(2,2), ..., b(2,5)

      .

      b(4,1), b(4,2), ..., b(4,5)

Počet indexov ani veľkosť jednotlivých indexov nie je obmedzená. Obmedzenie je však v tom, že pole sa musí do voľnej pamäti zmestiť. Po zadaní príkazu

      DIM c(100,100)

ohlási počítač chybu

      4 Out of memory

čo značí, že pre pole c nie je v pamäti dosť miesta.

Upozornenie: V jednom príkaze DIM môže byť uvedené len jedno pole.

Existujú tiež reťazcové polia. Reťazec a reťazcové pole sa od seba líšia tým, že pole má konštantnú dĺžku a priradenie je vykonané, že zvyšok dĺžky, ktorý nie je obsadený, je nahradený medzerami. Môžeme mať tiež pole jednotlivých znakov (ale s jedným ďalším rozmerom). Meno reťazcového poľa je jedno písmeno a znak $. Reťazec reťazcové pole nesmú mať navzájom zhodné meno (na rozdiel od polí číselných). Nemôžeme použiť preto súčasne premenné

      a$, a$(1,1)

Predpokladajte, že chcete pole a$ s piatimi reťazcami. Musíte sa rozhodnúť, ako dlhé budú tieto reťazce. Predpokladajte, že 10 znakov postačí. Pole definujte príkazom

      DIM a$ (5,10)

Tak je definované pole 5x10 znakov, ale môžete tiež uvažovať o rade znakov jednotlivých:

      a$(1)=a$(1,1)a$(1,2) ... a$(1,10)

      a$(2)=a$(2,1)a$(2,2) ... a$(2,10)

       . . . .

       . . . .

      a$(5)=a$(5,1)a$(1,2) ... a$(5,10)

Teda, keď zadáte 2 indexy, potom dostanete jeden znak, ale keď nenapíšete druhý index, dostanete reťazec definovanej dĺžky, kde dĺžka reťazca je daná druhou položkou v príkaze DIM. Tak napr. A$(2,7) je znak reťazca A$(2). Mohli by sme vlastne tiež písať A$(2)(7). Skúste:

      LET a$(2)="1234567890"

      PRINT a$(2),a$(2,7)

a dostanete

      1234567890     7

Pre posledný index (ten, ktorý môžeme vynechať) možno použiť techniku pre výber časti reťazca:

      a$(2,4 TO 8)=a$(2)(4 TO 8)="45678"

Pamätajte:

V reťazcovom poli majú reťazce rovnakú dĺžku. Posledný index príkazu DIM určuje dĺžku každého reťazca.

Po zadaní

      DIM a$(10)

uvidíte, že a$ sa chová ako reťazcová premenná s výnimkou, že má dĺžku 10 a po priradení hodnoty je zvyšok doplnený medzerami.