Lekce 1.19
Typ ARRAY - prom∞nnΘ typu pole


p°edchozφ lekce (1.18) obsah kurzu nßsledujφcφ lekce (1.20)

Pokud budete pot°ebovat v programu vφce prom∞nn²ch, nap°φklad pro ulo₧enφ v²sledk∙ v²poΦt∙, m∙₧ete v²hodn∞ pou₧φt deklaraci prom∞nnΘ typu ARRAY (pole). Pole je seskupenφ prom∞nn²ch, kterΘ jsou dostupnΘ indexem pole udßvajφcφ pozici prvku v poli. V²hodou je, ₧e se jednß o jednu prom∞nnou, jejφ₧ deklarace je velmi jednoduchß. Nenφ takΘ nutnΘ znßt rozsah pole ji₧ p°i deklaraci prom∞nnΘ, ale je mo₧nΘ pou₧φt rozsah pole zadan² a₧ dßle v programu v zßvislosti na p°edchozφch v²poΦtech. Funkce pro prßci s polem obsahuje knihovna pro prßci s poli, se kterou se nynφ seznßmφme.

Prom∞nnΘ s mo₧nostφ indexovΘho p°φstupu jsou obsa₧eny i v jazycφch KLONDAIK a JUKON, pou₧φvajφ se vÜak k tomu jinΘ procedury a funkce!

Pole si m∙₧ete jednoduÜe p°edstavit jako °adu hodnot. Ka₧dß hodnota je uvßd∞na jako jeden prvek pole. Pro p°φstup k jednotliv²m hodnotßm musφte p°itom pou₧φt tzv. index, kter²m zadßvßte po°adφ prvku (hodnoty) v poli. Celkovß dimenze (rozsah) pole se zadßvß p°i inicializaci pole.

Pole m∙₧e b²t jednorozm∞rnΘ nebo vφcerozm∞rnΘ. Jednorozm∞rnΘ pole je vlastn∞ °ada hodnot a index se zadßvß jako po°adφ hodnoty. Dvourozm∞rnΘ pole je mo₧nΘ si jednoduÜe p°edstavit jako Üachovnici. Index pro p°φstup do dvourozm∞rnΘho pole v tomto p°φpad∞ udßvß °ßdek a sloupec Üachovnice. Rozsah index∙ pole zaΦφnß v₧dy od nuly.

S prom∞nnou typu Array (pole) se pracuje jinak, ne₧ s b∞₧nou prom∞nnou. Prom∞nnou musφte nejprve pomocφ p°φkazu Dim deklarovat. Rozsah pole je mo₧nΘ uvΘst ihned p°i jeho deklaraci. Rozsah pole se uvßdφ Φφslem v zßvorce za jmΘnem pole. To je vhodnΘ, pokud znßte ji₧ p°i zßpisu programu po₧adovan² rozsah pole. Pokud po₧adovan² rozsah pole neznßte, je mo₧nΘ uvΘst v deklaraci pole pouze prßzdnΘ zßvorky. Tφm je definovßno dynamickΘ pole, jeho₧ velikost je mo₧nΘ zm∞nit p°φkazem ReDim.


Dim Jmeno(10)    'pole pro 10 jmen
Dim Osoby()      'dynamickΘ pole 
Pole mß po svΘ deklaraci napln∞ny svΘ polo₧ky prßzdnou hodnotou typu Variant. V programu m∙₧ete potom vlo₧it do jednotliv²ch bun∞k hodnoty libovolnΘho typu. K jednotliv²m polo₧kßm pole m∙₧ete p°istupovat b∞₧n²m zp∙sobem, musφte vÜak uvΘst v₧dy index polo₧ky pole, se kterou budete chtφt pracovat:

Dim Pole(9)
For X = 0 to 9
    Pole(X) = 0  'ulo₧enφ hodnoty
Next
Uveden² p°φklad nuloval pole s indexy od 0 do 9. Toto pole obsahuje tedy deset prvk∙ - s indexy od nuly do 9. Do ka₧dΘ polo₧ky pole byla vlo₧ena nulovß Φφselnß hodnota. Stejn∞ jednoduch²m zp∙sobem je takΘ mo₧nΘ Φφst jednotlivΘ polo₧ky pole:

For X = 0 to 9
    Writeln(Pole(X)) 'Φtenφ hodnoty
Next
Obdobn²m zp∙sobem se pracuje i s vφcerozm∞rn²m polem. P°i p°φstupu k vφcerozm∞rnΘmu poli je vÜak nutnΘ uvßd∞t p°φsluÜnΘ vφcenßsobnΘ p°φstupovΘ indexy:

Dim Pole(3, 10)
For X = 0 to 3
    For Y = 0 to 9
       Pole(X, Y) = 0      'ulo₧enφ hodnoty
       Writeln(Pole(X, Y)) 'Φtenφ hodnoty
    Next
Next
Po inicializaci obsahuje ka₧d² prvek pole prßzdnou hodnotu nedefinovanΘho stavu. Je proto vhodnΘ po ihned po inicializaci pole p°ed jeho dalÜφm pou₧itφm naplnit pole poΦßteΦnφmi hodnotami po₧adovanΘho typu. Mo₧nost poΦßteΦnφho napln∞nφ pole je uvedena ve v²Üe uveden²ch inicializacφch pole.

V mnoha p°φpadech, nap°φklad p°i programovßnφ cykl∙, bude vhodnΘ mφt z programu p°φstup k rozsahu indexovßnφ polφ. K tomu slou₧φ funkce Lbound a Ubound. Dφky tomu je nap°φklad mo₧nΘ nulovat polo₧ky pole nßsledujφcφm zp∙sobem:


'jednorozm∞rnΘ pole 
Dim Pole1(9)
For X = LBound(Pole1) to UBound(Pole1)
    Pole1(X) = 0
Next

'dvourozm∞rnΘ pole 
Dim Pole2(3, 10)
For X = LBound(Pole2,1) to UBound(Pole2,1)
    For Y = LBound(Pole2,2) to UBound(Pole2,2)
       Pole2(X, Y) = 0
    Next
Next
Vyu₧itφ prom∞nn²ch typu pole je velmi rozsßhlΘ. Jak ji₧ bylo uvedeno, je vhodnΘ je p°edevÜφm pou₧φvat pro seskupenφ v∞tÜφho poΦtu hodnot, ke kter²m je mo₧nΘ p°istupovat pomocφ indexu pole. Indexovan² p°φstup p°itom umo₧nφ zpracovßnφ obsahu pole v cyklech. K zadßnφ poΦßteΦnφho indexu pole m∙₧ete pou₧φt funkce LBound a UBound.

ZφskanΘ znalosti o programovßnφ polφ m∙₧ete vyzkouÜet nap°φklad na v²poΦtu pr∙m∞rnΘ hodnoty nßhodnΘ veliΦiny funkcφ Rnd. Nejednß se o zcela efektivnφ p°φklad, proto₧e nenφ nutnΘ nßhodnΘ veliΦiny uklßdat do pole. Nynφ nßm jde spφÜe o vysv∞tlenφ principu pou₧φvßnφ polφ.


Sub Main()
    ConsoleClear
    ConsoleShow
    Randomize

    'inicializace jednorozm∞rnΘho pole
    Dim Cislo(9) '0 a₧ 9 = 10 polφ

    'cyklus pro celΘ pole
    For X = LBound(Cislo) to UBound(Cislo)
       Cislo(X) = Int(Rnd*100)  'nßhodnΘ Φφslo od 0 do 100
       Writeln(Cislo(X))        'v²pis hodnoty cisla
    Next

    'v²poΦet souΦtu a pr∙m∞ru ulo₧en²ch hodnot
    Soucet = 0
    For X = LBound(Cislo) to UBound(Cislo)
        Soucet = Soucet + Cislo(X)
    Next
    Writeln("-------------")
    Writeln("SouΦet:"+CStr(Soucet))
    Writeln("Pr∙m∞r:"+CStr(Soucet/(UBound(Cislo)+1)))
End Sub
V programu je deklarovßno pole se jmΘnem Cislo, obsahujφcφ deset prvk∙. K jednotliv²m prvk∙m pole m∙₧ete p°istupovat pomocφ indexu pole. Pole nejprve naplnφme nßhodn²mi hodnotami. Nßsledn∞ je seΦteme a vypoΦφtßme a zobrazφme jejich pr∙m∞r.

V dalÜφm p°φklad∞ ji₧ budeme pracovat s dvourozm∞rn²m polem. VÜimn∞te si, ₧e prvky pole mohou b²t r∙znΘho typu.

S prom∞nnou typu ARRAY (pole) je mo₧nΘ provßd∞t mimo v²Üe uveden²ch operacφ navφc i b∞₧nΘ p°i°azenφ obsahu jinΘ prom∞nnΘ:


Dim Pole1(5)
Dim Pole2
Pole1(2) = "BONANZA"
Pole2 = Pole1
Writeln(Pole2(2)) 'vypφÜe BONANZA
Jak jste si jist∞ vÜimli, prom∞nnß Pole2 byla deklarovßna jako b∞₧nß prom∞nnß. P°i°azenφm novΘho obsahu prom∞nnΘ polo₧kou, kterß byla deklarovßna jako pole je nßsledn∞ mo₧nΘ k tΘto polo₧ce p°istupovat takΘ jako k prom∞nnΘ typu pole. SouΦasn∞ s tφm se do prom∞nnΘ Pole2 dosadily i hodnoty z p∙vodnφ prom∞nnΘ.

Jist∞ uznßte, ₧e mo₧nost tvorby a pou₧φvßnφ prom∞nn²ch typu pole je velmi zajφmavß. M∞jte vÜak na pam∞ti, ₧e zvlßÜt∞ vφcerozm∞rnß pole zabφrajφ v pam∞ti dost prostoru. Bu∩te proto opatrnφ a nepou₧φvejte rozsßhlß mnohapolo₧kovß pole.

DalÜφ jednoduch² p°φklad prßce s polem je uveden v programu DIMENZE.BON Jednoduch² p°φklad pou₧itφ polφ m∙₧ete nalΘzt i v programu SPORTKA.BON.


p°edchozφ lekce (1.18) obsah kurzu nßsledujφcφ lekce (1.20)

OZOGAN, 1 Mßje 97, 460 01 Liberec
tel.,fax: (048) 52 28 338, e-mail: info@ozogan.cz