Na začiatok vám chcem zaželať veľa úspechov v roku 2005 a čo najmenej chýb vo vlastných programoch :-). Dúfam, že zas každú stredu strávime trochou programovania v modernom programovacom jazyku C#.
V tomto už naozaj poslednom dieli o poliach sa budeme zaoberať veľmi zaujímavými možnosťami práce s poliami v C#. Predpokladám, že predchádzajúce články máte nielen prečítané ale ste aj všetkému porozumeli. Dnes som sa rozhodol napísať viac príkladov ako vysvetľujúceho textu.
>>Utriedenie jednorozmerného pola jedným príkazom
Príklad 7.1
using System;
class MainClass
{
public static void Main(string[] args)
{
int[] vektor = new int[]{ 1,5,6,7,2,6};
string[] slova = new string[] { "mas", "ako",
"sa","Ahoj"};
Array.Sort(vektor);
Array.Sort(slova);
foreach(int prvok in vektor) Console.WriteLine(prvok);
foreach(string slovo in slova) Console.WriteLine(slovo);
}
}
Všimnite si, že funkcia Array.Sort() nie je nikde inde doprogramovaná. Je implementovaná už v základnej knižnici System.
>>Hľadanie prvku v jednorozmernom poli - Prvá možnosť
Príklad 7.2
using System;
class MainClass
{
public static void Main(string[] args)
{
int[] vektor = new int[] { 321, 15, -87, 22};
int index;
index = Array.IndexOf(vektor,15);
Console.WriteLine(" Prvok 15 je na pozicii {0}",index);
}
}
Pozor na to, že indexovanie pola začína od nuly. Ale čo ak sa prvok v poli nenachádza? Vtedy program nespadne ale funkcia IndeOf() vráti hodnotu -1. Radím vyskúšať si to. Ak sa prvok s hľadanou hodnotou vyskytuje viac krát, tak sa vráti index prvku s najnižším indexom.
>> Hľadanie prvku v jednorozmernom poli - Druhá možnosť
Niekedy sa vám môže stať, že v poli sa nachádzajú tisíce prvokov. To môže nastať napríklad keď programujete databázu. Ak ide o veľmi vyťaženú databázu tak určite chcete aby vyhľadanie určitého prvku bolo čo najrýchlejšie. Vtedy je dobre databázu utriediť po vložení jedného alebo skupiny nových prvokov (napr. o polnoci, keď databázu používa málo ľudí).
Vyhľadávanie v utriedenom poli je rýchlejšie ale nepoužiteľné ak sa pozície prvkov v poli nesmú meniť (teda triediť), logické, nie?
Príklad 7.3
using System; class MainClass
{
public static void Main(string[] args)
{
int[] vektor = new int[] { 15, -5, 56, 150, -200};
int index;
Array.Sort(vektor);
index =Array.BinarySearch(vektor,15);
Console.WriteLine(" Prvok 15 je na pozicii {0}",index);
}
}
Ak použijete funkciu BinarySearch() na neutriedené pole, tak namiesto indexu vráti hodnotu
-1.
>> Obrátenie poriadia prvkov vo vektore
môžete využiť, keď chcete reverzné zotriedenie poľa.
Príklad 7.4
using System;
class MainClass
{
public static void Main(string[] args) { int[] vektor = new int[] {5, -12, 36, 2};
Array.Sort(vektor);
Array.Reverse(vektor);
foreach(int prvok in vektor)
Console.WriteLine(prvok);
}
}
>>Kopírovanie polí
Príklad je dôkladne okomentovaný, takže začnite s ním.
Príklad 7.5
using System;
class MainClass
{
public static void Main(string[] args)
{
int[] V1 = new int[] { 5, 8, 9};//original
int[] V2 = new int[3]; // toto bude kopia
V2=V1; // Chybne skopirujem pole
V2[2]=222; // Zmenim prvok noveho pola
foreach(int prvok in V1) // zmena sa prejavila aj
Console.WriteLine(prvok); // v povodnom poli
Console.WriteLine("-------------------------");
V2 = (int[]) V1.Clone(); // naklonovanie pola
V2[0]=333; // zmenim prvok
foreach(int prvok in V1) // povodne pole neobsahuje
Console.WriteLine(prvok); // prvok 333
}
}
Najprv sme vytvorili takzvanú plytkú kópiu pola. To znamená, že obidve premenné odkazujú na tú istú oblasť pamäti v RAM (pamäť počítača). Preto zmena prvku v jednom poli sa prejaví aj v druhom poli. To je väčšinou nesprávne. Aby sa tak nedialo, musíme použiť funkciu Clone(), ktorá ale vracia prvok typu Object, ktorý musíme pretypovať. Ak neviete, čo to je, nemajte strach, bude to vysvetlené neskôr, hlavne si zatiaľ pozrite syntax v príklade.
Pre lepšie pochopenie ešte obrázok:

>> Čo bude nabudúce?
Rozhodol som sa, že je ešte čas začať s objektovo orientovaním programovaním, aj keď ho už aj tak využívame v každom príklade. Takže nabudúce dokončíme zaujímavé typy premenných ako sú enemerata, štruktúry, textové reťazce atď.
>> Ak budete mat trochu času, tak mi napíšte do diskusie, či sa vám článok páčil, ako hodnotíte seriál o C# celkovo, čo by som mal na mojom štýle vysvetľovania zmeniť a podobne. Uvítam každú konštruktívnu kritiku.
Michal Čižmár
micitn@orangemail.sk <mailto:micitn@orangemail.sk>
SEE YOU!
>> Všetky príklady z článku:
www.inet.sk/download/user/Priklad8.1_TriedenieVektora.zip
www.inet.sk/download/user/Priklad8.2_HladaniePrvku.zip
www.inet.sk/download/user/Priklad8.3_HladaniePrvku2.zip
www.inet.sk/download/user/Priklad8.4_OpacneUsporiadanie.zip
www.inet.sk/download/user/Priklad8.5_KopirovaniePoli.zip
>> Minulé články
Programujeme v jazyku C# - Diel 7. - Polia III.
Programujeme v jazyku C# - Diel 6. - Polia II.
Programujeme v jazyku C# - Diel 5. Polia I.
Programujeme v jazyku C# - Diel 4
Programujeme v jazyku C# - Diel 3
Programujeme v jazyku C# - Diel 2
Programujeme v jazyku C# - Diel 1
Porovnanie C# vs. C++