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) |