AGK Tier 1 alapok 5. rész – Tömbök

Az előző leckében szó esett a változókról és hogy milyen műveleteket is végezhetünk velük. Ebben a leckében a tömbökről lesz szó.

Tömbök ugyanazt a célt szolgálják mint a változók, ám a változókkal ellentétben egy tömb egyszerre több információt is képes tárolni nem csak egyet. Gondoljunk egy tömbre úgy mint egy rekeszre amiben egyszerre több mindent is tudunk tárolni.

Akár csak egy változó esetében egy tömböt is először létre kell hozni, el kell nevezni és meg kell határozni milyen jellegű információt fogunk tárolni a tömbben. Minden tömb csak egyfajta információt tud tárolni.

Lássunk is egy példát.

dim tomb [5] as integer

Ahogy láthatjuk egy tömb létrehozását a dim utasítással kezdjük, ezzel jelezzük hogy egy tömböt kívánunk létrehozni. Ezt követi a tömb neve, ez esetben tomb, majd ez után [ ] jelek közé írhatjuk be hogy a tömbünk menyi adatot fog tárolni, mennyi cellával rendelkezzen majd ezt követően megadhatjuk az adat típust ami ez esetben integer vagyis egész szám. Vissza térve az 5-ös számra, ez egy kissé megtévesztő lehet ugyanis annak ellenére hogy ott 5 szerepel, gyakorlatilag 6 darab celláról van szó amiben adatokat tárolhatunk, ugyanis egy tömb esetén a nulladik cella is számít. Szóval 0,1,2,3,4,5 Ez összesen 6 cella amiben értékeket tárolhatunk.

Értékeket rendelni egy cellához 2 módon lehetséges.

dim tomb [5] as integer = [1,2,3,4,5,6]

A sort nullával kezdjük egészen 5-ig. Szóval az első szám a nulladik cellába kerül, a második az elsőbe és így tovább egészen a hatodik celláig. Vagy hozzá is rendelhetjük az értékeket egyenként a cellákhoz.

dim tomb [5] as integer

tomb [0] = 1
tomb [1] = 2
tomb [2] = 3
tomb [3] = 4
tomb [4] = 5
tomb [5] = 6

Ugyan így az értékeket bármikor módisíthatjuk is bármelyik cellában.

Talán felmerülhet bennünk a kérdés hogy mégis mi a gyakorlati haszna a tömböknek ha úgy is manuálisan végig kell menni minden cellán mint a változókon hogy értékeket rendeljünk hozzá. Nos, ez igazén az adott szituációtól függ. Ezt nekünk kell eldönteni hogy számunkra könnyebb lesz-e tömbökkel dolgozni vagy sem és hogy elegáns lesz-e a megoldásunk vagy sem. Például, ha szeretnénk mondjuk 6 név közül véletlenszerűen kiválasztani egyet, talán könnyebb és elegánsabb lehet egy tömböt feltölteni 6 darab névvel és választani egyet véletlenszerűen amit kiíratunk a képernyőre.

dim tomb$ [5] as string = ["pistike","sanyika","marika","bence","botond","szilvi"]

veletlen_nev = Random(0,5)

do
    Print( tomb$ [veletlen_nev] ) 
    Sync()
loop

Ahogy láthatjuk, a tömbünk ezúttal string adatokat tárol és minden cellához hozzáadtunk egy nevet. Majd ezután egy integer változóban generáltunk egy véletlen számot 0-tól 5-ig és végül ezt a számot felhasználtuk a tömbünkben a cella számaként hogy kiírassuk az adott cellában tárolt nevet a képernyőre.

A tömbök felhasználásának számtalan módja van a későbbiekben akár írhatunk egy algoritmust is ami végig megy egy tömb minden egyes celláján és adott értékekkel feltölti azokat, vagy épp kiolvassa, átírja azokat de erről majd bővebben amikor a ciklusokról tanulunk.

Amiről eddig szó volt az csak 1 dimenziós tömb, ám a tömbök több dimenziósak is lehetnek.

dim tomb[5,5] as integer

Ez egy 2 dimenziós tömb. Egy tömb összesen 6 dimenzióból állhat. Úgy képzeljük el mint egy kockát, minden oldalán rekeszekkel amikben információt tárolhatunk.

Ha egy többdimenziós tömbben információt akarunk tárolni, a tömb összes dimenziójában található minden cella kombinációja tárolhat információt.

dim tomb[5,5] as integer

tomb[0,0] = 1
tomb[0,1] = 2
tomb[0,2] = 3
tomb[0,3] = 4
tomb[0,4] = 5
tomb[0,5] = 6
Adding a Taparia digital tester in your tool box also is a great idea to get a dissolvable for their inconvenience in a pocket good way. levitra online Other symptoms that are usually present at diagnosis include a history of blurred vision, itchiness, peripheral neuropathy, recurrent infections, and fatigue. purchasing cialis online Erectile dysfunction can also occur in young men.  viagra line levitra on line  Citrulline permits our body to make more Arginine and to allow Nitric Oxide Supplements to exist a little longer inside body. 
tomb[1,0] = 7
tomb[1,1] = 8
tomb[1,2] = 9
tomb[1,3] = 10
tomb[1,4] = 11
tomb[1,5] = 12

tomb[2,0] = 13
tomb[2,1] = 14
tomb[2,2] = 15

És a sort hosszasan folytathatnám még el nem érem mind 2 dimenzió utolsó celláját az-az tomb[5,5]

Többdimenziós tömböket tényleg csak akkor érdemes használni ha egy algoritmuson keresztül kezeljük az adatokat, illetve ha egy adott struktúrában kívánunk adatokat tárolni. Például ha szeretnénk több ember nevét, korát és hajszínét egy tömbben tárolni, ez esetben egy háromdimenziós tömbre lenne szükségünk.

szemely[neve,kora,hajszine]

Az első dimenzió tárolná a személyek nevét, a második dimenzió a korát és a harmadik dimenzió pedig a hajszínüket. Mondjuk tegyük fel 3 személyről kívánunk ezen információkat tárolni. Ez azt jelenti hogy az első dimenzióban 3 cellára lesz szükségünk mert 3 különböző személy adatait fogjuk tárolni ám a második és harmadik dimenzióban, elég lesz mindössze 2 cella, máris mutatom hogy miért.

dim szemely$ [2,1,1] as string

//nevek
szemely$[0,0,0] = "pistike"
szemely$[1,0,0] = "marika"
szemely$[2,0,0] = "szilvi"

//korok
szemely$[0,1,0] = "21"
szemely$[1,1,0] = "23"
szemely$[2,1,0] = "85"

//hajszín
szemely$[0,0,1] = "barna"
szemely$[1,0,1] = "fekete"
szemely$[2,0,1] = "piros"

//válasszunk ki egy véletlen személyt
veletlen_szemely = Random(0,2)

do
    //írjuk ki a kiválasztott személy nevét, korát és hajszinét
    Print(szemely$[veletlen_szemely,0,0] + " " + szemely$[veletlen_szemely,1,0] + " " + szemely$[veletlen_szemely,0,1])
    Sync() 
loop

Ahogy láthatjuk, rendszer van benne hogy mely cella kombinációk milyen adatot tárolnak és ily módon akár véletlenszerűen kiválaszthatunk egy személyt az első dimenzió celláinak számát használva (0,1,2) és utána egyszerűen lekérhetjük az adott személy nevét, korát és hajszínét a második és a harmadik dimenzió celláinak kombinációjával. Ha 0,0 a vége akkor az illető nevét kérjük le, ha 1,0 a vége akkor az illető korát kérjük le. ha pedig 0,1 akkor az illető hajszínét.

Természetesen ilyesfajta adatok tárolására van jobb megoldás is ám úgy gondoltam ez egy jó példa lehet arra hogy bemutassam miként is lehet a tömbök dimenzióit és celláit kihasználni.

Ám ha egy igazán jó és egyszerű példát  szeretnénk látni a többdimenziós tömbök gyakorlati használatára, csak annyi a dolgunk hogy játszunk egy kis Minecraft-ot. A játék világa gyakorlatilag egy hatalmas tömb és minden kocka egy cellában foglal helyet. A játék elején egy algoritmus feltölti a cellákat kockákkal majd egy újabb algoritmus kitöröl pár kockát egy rendszert követve ezzel kialakítva a domborzatot, hegyeket és barlangokat.  Egy újabb algoritmus pedig eldönti hogy a kocka az adott helyen füves, esetleg havas vagy csak föld, esetleg kő vagy ásvány. Ám a lényeg hogy a játék szigorúan véve egy hatalmas tömb aminek a cellái kockákkal vannak feltöltve, ahol pedig nincs kocka azok a cellák gyakorlatilag üresek. Amikor elkezdünk építkezni nem teszünk mást mint megtöltjük az addig üres cellákat és amikor bontunk, ásunk, fúrunk, rombolunk, gyakorlatilag a cellák tartalmát töröljük.

Ha ez teljesen új számunkra, lehet így elsőre kicsit nehéz megemészteni, ám ha így is van, azt javaslom hogy ne aggódjunk miatta. Ahogy elkezdünk programozni majd és egyre több gyakorlatunk lesz, egyre komplexebb programokat írunk majd, annál egyszerűbb lesz megérteni és felismerni pontosan hogyan és miben segítenek nekünk a tömbök.

A következő leckében a felhasználói adattípusokról lesz szó.