p°edchozφ lekce (1.18) | obsah kurzu | nßsledujφcφ lekce (1.20) |
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) |