Programujeme v jazyku C# - Diel 7. - Polia III.

Michal Čižmár  /  29. 12. 2004, 00:00

Ako som sľúbil, v tomto článku sa budeme venovať príkazu foreach, ktorý je neznámy pre programátorov C++, ale zato veľmi známy programátorom VisualBasicu. Nakoniec jeden malý test, či ste porozumeli poliam.

Ozaj, aký bol Ježiško (alias Santa Claus)? Ak ste náhodou dostali nejakú dobrú knihu o programovaní tak mi napíšte do diskusie, ako ste s ňou spokojný.

>>Jednoduché vypísanie obsahu vektora

Všimli ste si, že kedykoľvek sme potrebovali len vypísať prvky vo vektore, museli sme to dať do cyklu for. C# prebral od VisualBasic-u príkaz foreach, ktorý má nasledujúcu syntax.

foreach
(typ vypisovaná_premenná in vektor) príkaz.

typ
- akého typu sú prvky vo vektore
vypisovaná_premenná -
budú sa do nej vkladať postupne všetky prvky poľa.
vektor
- jednorozmerné pole, ktorého prvky chceme vypísať.

Dajme si hneď príklad:

Príklad 7.1

using
System; class MainClass
{
  
public static void Main(string[] args)
   {
      int[] vektor = new int[] { 8, 12, 13, 10, 8, 9, 5};

     foreach(int i in vektor) Console.WriteLine(i);
   }
}

>>Aké sú výhody a nevýhody príkazu foreach ?

Výhody:     Nemusíme zisťovať dĺžku vektora.
                Jednoduchý zápis pre vektory.
Nevýhody:  Prvky pola sa nedajú meniť !!!!!
                Pre viacrozmerné polia je zápis neprehľadný.
                Použiteľné len pre nepravidelné  viacrozmerné polia.
                Začína vždy s prvkom s indexom 0.

>> Príkaz foreach pre viacrozmerné nepravidelné polia

Príklad 7.2
using System;

class MainClass
{

 public static void Main(string[] args)
  { int[][] matica = new int[2][] {
                           new int[2] { 5,6},
                          new int[3] { 1,5,3} };
  foreach(int[] riadok in matica)
        foreach(int prvok in riadok)    
             Console.WriteLine(prvok);
  }
}

Toto je už trochu zložitejší príklad. Najprv sa definuje (= deklaruje + naplní hodnotami) nepravidelné pole.

Prvý príkaz foreach prechádza prvkami typu int[], čo sú vlastne riadky matice.

Druhý príkaz foreach využíva riadky z predchádzajúceho foreach a prechádza po jeho jednotlivých prvkoch.

To či budete používať pre vypisovanie prvkov príkaz foreach je len na vás.

>>Malý bonus, len pre odvážnych : -)
V C# je možne deklarovať aj nepravidelné pole zložené z pravidelných polí. Potom deklarácia vyzerá takto :

Príklad 7.3
using System;
class
MainClass
{
public static void Main(string[] args)
{
   
int[,] matica1 = new int[,]  // matica 2x3

                   
{ {5,6,8}, { 8,6,9} };
   
int[,] matica2 = new int[,]  // matica 2x3

                   
{ {8,6,4}, { 1,2,3} };
   
int[,] matica3 = new int[,] // matica 3x3
                
{ {1,2,3}, { 8,2,4}, {2,2,2} };

   
int [][,] vektorMatic1  = new int[2][,]
                       {
matica1, matica2 };
   
int [][,] vektorMatic2 = new int[1][,]
                       {
matica3};

   
int [][][,] superMatica = new int [2][][,] // !!! :-)
                  {
vektorMatic1, vektorMatic2};

// program nema nijaku prakticku funkciu, ide o princip

 
}
}

S takýmito trochu “zložitejšími hračičkami“ sa robia niektoré algoritmy, ktoré sa dosť často vyskytujú pri programovaní hier a hlavne grafiky.
Nám to bude slúžiť iba ako test, či ste doteraz čítali pozorne a či ste pochopili podstatu polí. Skúste sa trochu zamyslieť nad predchádzajúcim príkladom a až potom čítajte ďalej......

Tak čo, je vám to jasné ? Ak nie tu je vysvetlenie :
Najprv sme si vytvorili 3 pravidelné matice, pričom dve sú 2x3a jedna 3x3. Potom sme vytvorili dva jednoduché vektory, ktoré ale obsahujú premenné typu matica (obidva sú vektory aj keď druhý obsahuje len jeden prvok). Tieto dva vektory sú vlastne riadky superMatice. Nakoniec sme vytvorili posledný vektor, ktorý obsahuje prvky typu vektor, ktorého prvý sú matice. :-)) Inak povedané vyskladali sme jednu veľkú maticu pomocou submatíc.

Grafický povedané:


                             


>> Čo bude nabudúce?


V budúcom článku dokončíme sériu o poliach. Bude tam 5 veľmi zaujímavých príkladov, ktoré ukážu skrytú silu jazyka C# v práci s poliami. Odporúčam čítať hlavne programátorom v jazyku C++, veď uvidíte prečo.


Teším sa na diskusiu a e-maily s pripomienkami.


Michal Čižmár

micitn@orangemail.sk

                                   SEE YOU! 


>> Všetky príklady z článku:
/download/user/Priklad7.1_CyklusForEach.zip
/download/user/Priklad7.2_ForEachPreNepravidelnePolia.zip
/download/user/Priklad7.3_MaticaMatic.zip

>> Minulé články
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++

Neprehliadnite: