TABELE V C#

TABELE V C#

Avtor: Maja Vrenko

KAJ JE TABELA?

Tabela (ang.array) je sestavljena podatkovna struktura.
Tabele običajno uporabimo, ko se srečamo z večjo količino podatkov istega tipa nad katerimi želimo izvajati podobne (ali enake) operacije. Uporabljamo jih torej v primerih, ko moramo na enak način obdelati skupino vrednosti istega tipa.

Prednost tabele je ta, da celotno deklaracijo opravimo zelo hitro (po navadi ena vrstica kode). Poleg tega pa je tudi dostop do posameznih podatkov preprost.

Spremenljivke, ki jih hranimo v tabeli imajo vse enako ime (npr. tabela), razlikujejo pa se po indeksu, zaradi česar vsako od njih obravnavamo kot samostojno spremenljivko. Tako do podatkov dostopamo s pomočjo indeksa.

Glede na razsežnost ločimo enorazsežne in večrazsežne tabele.
Enorazsežne tabele vsebujejo le en stolpec, v katerem imamo vnaprej določeno število vrstic. Podatke si lahko predstavljamo kot nekakšno verigo ali niz. Do podatkov dostopamo s pomočjo indeksa.
Večrazsežna tabela ima določeno število stolpcev in določeno število vrstic. Do podatkov dostopamo, da določimo indekse za posamezno polje.

(tabele.jpg)
Primeri tabel

DEKLARACIJA TABELE

Najprej se moramo naučiti, kako tabele navajamo.

1. NAČIN: Najprej najavimo ime tabele. Nato z operatorjem new dejansko ustvarimo tabelo.

Običajen postopek je, da za tipom tabele navedemo oglate oklepaje in ime tabele.

podatkovniTip [] imeTabele;

(deklaracija_prvic.jpg)
Deklaracija tabele

Podatkovni tipi so lahko različni in sicer:

  • lahko ustvarimo tabelo celih števil, v tem primeru je podatkovni tip int;
  • lahko ustvarimo tabelo nizov, v tem primeru je podatkovni tip string;
  • lahko ustvarimo tabelo realnih (decimalnih) števil, v tem primeru je podatkovni tip double;
  • lahko ustvarimo tabelo znakov, v tem primeru je podatkovni tip char;
  • lahko ustvarimo tabelo logičnih vrednosti, v tem primeru je podatkovni tip bool;
  • lahko ustvarjamo tudi svoje razrede (npr. razred Knjiga), v tem primeru je podatkovni tip enak objektu tega razreda (Knjiga).

Ime tabele je lahko poljubno.

Stavek na prejšnji strani določa le spremenljivko, ki hrani NASLOV bodoče tabele.
Pomnilniško lokacijo, kjer bodo elementi tabele dejansko shranjeni, in potrebno količino pa dokončno pripravimo z ukazom new.

imeTabele = new podatkovniTip[velikost];

(deklaracija_drugic.jpg)
Deklaracija tabele

Ukaz new zasede prostor v polnilniku za shranjevanje spremenljivk izbranega tipa in vrne njegov naslov. Velikost pa določa število elementov, ki jih lahko hranimo v tabli oziroma z drugimi besedami predstavlja število vrstic.

2. NAČIN: Oba zgoraj opisana dela lahko združimo v en stavek in sicer:

podatkovniTip[] imeTabele = new podatkovniTip[velikost];

(deklaracija_tretjic.jpg)
Združena zgoraj opisana dela

Pri določanju velikosti ni nujno, da vpišemo kot velikost konstanto. Kot velikost lahko vpišemo poljuben izraz, kar prikazuje tudi spodnja slika.

(deklaracija_cetrtic.jpg)
Deklaracija tabele

Pri tem načinu določanja tabele se vsi elementi samodejno nastavijo na začetno vrednost, ki jo določa tip tabele. Pri tabeli celih števil (torej tipa int) se vse začetne vrednosti nastavijo na 0. Pri tabeli logičnih vrednosti (torej tipa bool) se vse začetne vrednosti nastavijo na false.

3. NAČIN: Tabelo najprej najavimo, z operatorjem new zasedemo pomnilniško lokacijo, nato pa elementom določimo začetno vrednost.

(deklaracija_petic.jpg)
Deklaracija tabele

4. NAČIN: Takoj ob najavi tabele elementom tudi že določimo začetne vrednosti. To naredimo tako, da vrednosti zapišemo med zavita oklepaja in jih ločimo z vejico.

int[] tabStevila = {3, 4, 5, 6, 7, 8, 9};

(deklaracija_sestic.jpg)
Deklaracija tabele

V tem primeru dolžine tabele ne navedemo, saj jo prevajalnik izračuna sam. Potrebno je paziti, da so vsi našteti elementi ustreznega podatkovnega tipa (v našem primeru int).

MOŽNA NAPAKA PRI DEKLARACIJI: NEUJEMANJE TIPOV DEKLARACIJE

Če želimo tabelo deklarirati na naslednji način:

(mozne_napake1.jpg)
Napačna deklaracija

Se nam v spodnjem levem kotu izpiše naslednja napaka:

(mozne_napake2.jpg)
Napaka

Če še enkrat pogledamo zgornjo deklaracijo tabele vidimo, da smo ustvarili tabelo nizov. Ustvarjeni tabeli smo nato priredili celoštevilske vrednosti. Napaka se je torej izpisala zaradi neujemanja tipov. Napako odpravimo tako, da napišemo ustrezen tip podatka.

(mozne_napake3.jpg)
Odprava napake

OPOMBA: Glede na ujemanje tipov sta izjemi ujemanja sledeči:

  • Podatkovni tip spremenljivke je double, tip elementa je int. Torej tabela je namenjena spremenljivkam tipa double, vendar kljub temu lahko vanjo vstavljamo cela števila.
  • Podatkovni tip spremenljivke je int, tip elementa je char. Torej tabela je namenjena spremenljivkam tipa int, vendar kljub temu lahko vanjo vstavljamo znakovne elemente (elemente tipa char).

INDEKSI

Do spremenljivk v tabeli dostopamo s pomočjo indeksa. Preko indeksa tako tabelaričnim spremenljivkam določimo vrednost (jo incializiramo) ali pa jo uporabljamo kot običajno spremenljivko.

Začetni indeks tabele je vedno enak nič (0), končni indeks pa je za ena manjši od velikosti tabele (velikost -1).

S pomočjo indeksov dostopamo do i-tega elementa tabele oziroma spremenljivke na i-tem mestu. Za dostop uporabljamo naslednji izraz:

imeTabele[i]

Primer:
Najprej deklariramo tabelo ter ji določimo vrednosti. Nato želimo izpisati niz na prvem mestu tabele. Ker se štetje indeksov začne z 0, moramo le tega uporabiti za izpis prvega znaka.

(indeksi_prvic.jpg)
Indeksi

Ko napisano poženemo, se nam na zaslonu izpiše beseda sonce, kar je razvidno tudi iz spodnje slike.

(indeksi_drugic.jpg)
Izpis na zaslonu

Uporabo indeksov je mogoče prikazati tudi grafično.

(indeksi_tretjic.jpg)
Ustvarjanje tabele

Če tabelo deklariramo na zgornji način, si jo grafično lahko predstavljamo takole:

(indeksi_cetrtic.jpg)
Graficna predstavitev tabele

Če bi torej v tabelo želeli vstaviti peti element, bi to storili na naslednji način:

(indeksi_petic.jpg)
Vstavljanje petega elementa

Pri uporabi indeksov se zelo pogosto pojavi napaka prekoračitve indeksa (ang.IndexOutOfRangeException), kar pomeni da smo zašli izven tabele (prekoračili njeno dolžino). Do te napake bi prišlo, če bi recimo pri prejšnji nalogi namesto indeksa 4 napisali indeks 5.

(indeksi_sestic.jpg)
Napačno vstavljanje

Ko napisano poženemo, se nam na zaslonu odpre novo okno (kot prikazuje spodnja slika), katero nas opozarja na prekoračitev indeksa.

(indeksi_sedmic.jpg)
Prekoračitev indeksa

Kot smo že omenili s pomočjo indeksov lahko tudi določamo vrednosti spremenljivk v tabeli.

(indeksi_osmic.jpg)
Določanje vrednosti spremenljivkam v tabeli

IZPIS TABELE

Ker se v imenu tabele hrani le naslov tabele, kjer se le ta nahaja. Nam če želimo tabelo izpisati na naslednji način:

Console.WriteLine(imeTabele);

Ta način vrne le naslov in ne posameznih elementov. Prepričajmo se na naslednjem primeru:

(izpis_prvic.jpg)
Program za napačen izpis tabele

Ko napisano poženemo, se nam na zaslonu izpiše naslov tabele.

(izpis_drugic.jpg)
Določanje vrednosti spremenljivkam v tabeli

Torej, če želimo izpisati vrednost vseh elementov v tabeli, moramo vsak element obravnavati posebej.Že v prejšnjih poglavjih smo omenili, da do spremenljiv v tabeli dostopamo s pomočjo indeksov. Na primer do i-tega elementa oziroma elementa na indeksu i dostopamo z izrazom imeTabele[i].Če želimo izpisati vse elemente tabele bomo pri tem morali uporabiti zanko for. Najbolje, da si izpis tabele pogledamo kar na že zgoraj omenjenem primeru.

Najprej smo definirali tabelo nizov torej tipa string. Tabelo smo poimenovali tablaNizov ter ji že takoj priredili začetne vrednosti (navedene v vijugastih oklepajih).

(izpis_tretjic.jpg)
Program za pravilen izpis tabele

S for zanko se nato sprehodimo skozi celotno tabelo. Velikost tabele ugotovimo z ukazom tabelaNizov.Length. Na vsakem koraku for zanke na zaslon izpišemo vrednost spremenljivke v tabeli. Najprej izpišemo vrednost tiste spremenljivke z indeksom 0 in tako nadaljujemo dolker ne pridemo do konca tabele. Ob zagornu programa se nam na zaslon izpišejo vse spremenljivke tabele in sicer vsaka spremnljivka v svoji vrstici.

(izpis_cetrtic.jpg)
Izpis tabele

PRIMERJANJE TABEL

Pri primerjanju tabel gre za to, da želimo primerjati dve tabeli. Pri tem nas zanima, če so vsi istoležni elementi enaki (s tem mislimo elemente na enakih indeksih). Pogosto pri primerjanju naredimo naslednjo napako:

imePrveTabele==ImeDrugeTabele;

Ta način nam ne vrne pravega rezultata, saj tudi če tabeli vsebujeta enake elemente, nam ta zapis pove, da nista enaki. Če se spomnimo, smo v prejšnjih poglavjih omenili, da imena tabel vsebujejo le naslove, kjer se nahajata tabeli. Ker sta ti dve tabeli različni (sicer z enakimi elementi, vendar gre še vedno za dve tabeli), zato sta tudi naslova obeh različna. Primerjava, ki smo jo omenili zgoraj pa govori o naslovih. Preverimo nepravilnosti na spodnjem primeru.

(primerjanje_prvic.jpg)
Program za primerjanje naslovov dveh tabel

Kot vidimo na zgornji sliki vsebujeta tabeli tabNiz in tabelaNizov enake elemente na enakih indeksih. Torej sta tabeli enaki. Pri primerjanju s pomočjo naslovov tabel pa dobimo odgovor false (torej da sta tabeli različni).

Pravilno primerjamo dve tabeli tako, da se s pomočjo for zanke sprehodimo čez obe tabeli ter med seboj primerjamo elemente, ki se nahajajo na enakih indeksih. Najbolje si predstavljamo, če to uprizorimo s primerom, ki smo ga uporabili že zgoraj.

(primerjanje_drugic.jpg)
Primerjanje tabel

Kot vidimo na zgornji sliki vsebujeta tabeli tabNiz in tabelaNizov enake elemente na enakih indeksih. Torej sta tabeli enaki. Za primerjanje uvedemo spremenljivko tipa logična vrednost ter hkrati njegovo vrednost takoj nastavimo na True. Nato se s pomočjo for zanke sprehodimo skozi obe tabeli. Po korakih primerjamo elemente obeh tabel med seboj. Če bi se elementa razlikovala, bi vrednost logične spremenljivke nastavili na False. Na koncu na zaslon izpišemo vrednost logične spremenljivke enaka. V tem primeru nam logična spremenljivka vrne true. Torej sta tabeli enaki.

UPORABA ZANKE FOREACH

Zanka foreach izvede sprehod skozi elemente neke tabele ali množice objektov ter hkrati ponavlja množico stavkov. S pomočjo zanke ne moremo spreminjati elementov tabele.

Splošna oblika foreach zanke je naslednja:

foreach ( tip spremenljivka in tabela)
{
..stavki.. poljuben stavek ali več stavkov
}

Na začetku foreach zanke se deklarira spremenljivka poljubnega tipa, ki avtomatično pridobi vrednost posameznega elementa neke tabele, zaradi česar ima ta oblika zanke prednost pred klasičnim for stavkom za obdelavo neke tabele.

Poglejmo si uporabo foreach zanke na primeru, ko želimo izpisati vse elemente tabele. Najprej ustvarimo tabelo nizov in jo kar takoj zapolnimo z elementi. Ustvarimo tudi pomožno spremenljivko tipa string, v katero bomo kasneje dodajali elemente tabele. Nato sledi foreach zanka, s katero se sprehodimo skozi tabelo. Na vsakem koraku elemente tabele v našem primeru poimenovan niz dodamo v pomožno spremenljivko. Ko se sprehodimo skozi celotno tabelo, rezultate izpišemo na zaslon.

(foreach.jpg)
Primer uporabe foreach zanke

Slabost zanke foreach je, da jo lahko uporabimo le za obdelavo celotne tabele, ne pa tudi za obdelavo njenega dela. Tako foreach zanka vedno poteka od indeksa 0 do indeksa Length-1 (torej čez celotno tabelo). Zanke tudi ne more potekati v obratni smeri.

LASTNOSTI TABELE

(lastnosti.jpg)
Lastnosti tabele

DVODIMENZIONALNE IN VEČDIMENZIONALNE TABELE

Dvodimenzionalne tabele so tabele sestavljene iz vrstic in stolpcev.

Splošna deklaracija dvodimenzionalne tabele je podobna deklaraciji enodimenzionalne tabele.
Njena oblika je naslednja:

Podatkovni_tip[ , ] ime_tabele = new Podatkovni_tip [vrstic, stolpcev];

Tudi dvodimenzionalno tabelo lahko deklariramo na tri načine:

1.NAČIN: Najprej deklariramo tabelo (npr z imenom tabela) , kasneje pa ji določimo še velikost:

(vecDimTab_prvic.jpg)
Deklaracija večdimenzionalne tabele

2.NAČIN: združimo zgornja dva stavka v enega:

(vecDimTab_drugic.jpg)
Deklaracija večdimenzionalne tabele

3.NAČIN: Tabelo najprej deklariramo, z operatorjem new zasežemo pomnilnik, nato pa jo še inicializiramo

(vecDimTab_tretjic.jpg)
Deklaracija večdimenzionalne tabele

Kadar imamo večrazsežne tabele, uporabimo gnezdene zanke.

LITERATURA IN VIRI

0%
0%