3. C#

Snippet
Metoda s logickým návratem - validace, zda předaná hodnota náleží intervalu 

V následujícím zdrojovém kódu je uvedena hlavní metoda algoritmu DvourozmernePole - viz Kód 1. V hlavní metodě je deklarována maximální velikost dvourozměrného pole, tj. konstanta Max pro každou osu, tj. řádky, nebo sloupce. Následně je v hlavní metodě volána metoda Inicializace, ve které jsou deklarovány a následně nastaveny základní atributy dvourozměrného pole (výstupní parametry). V metodě je také vytvořena instance dvourozměrného pole - matice.

Uživatel má v hlavní metodě možnost zvolit způsob plnění matice pomocí metody bez návratu PlnitPole. K dispozici má tři možnosti, které jsou zvoleny na základě zadání celočíselného indexu:

  • 0 - Náhodně - náhodnými čísly
  • 1 - Jednotlivě - jednotlivě zadanými hodnotami uživatelem
  • 2 - Nulovat - plnění vektoru nulami
Po naplnění matice jsou prvky vypsány pomocí metody ZobrazitPole. Další volanou metodou z hlavní metody je MinimumVPoli. Tato metoda vyhledá nejmenší hodnotu ze všech hodnot uložených v matici. Tato metoda obsahuje dva výstupní parametry, které určují index řádku a index sloupce obsahujícího minimum. Stejný přístup využijeme při hledání největšího prvku matice pomocí funkce MaximumVPoli.

Uživateli je také v hlavní metodě vypsána vypočtená hodnota aritmetického průměru ze všech hodnot v matici. Pro výpočet je volána metoda PrumerPole, jenž navrací reálnou hodnotu aritmetického průměru. 

Další operací prováděnou s maticí je vzestupné setřídění prvků v jednotlivých řádcích pomocí metody SeraditPole. Tato metoda využívá princip algoritmu bublinkového řazení. Seřazená matice je následně vypsána.

Prvky matice jsou transponovány (otočeny) podle hlavní a následně podle vedlejší diagonály, kde po provedení každé transpozice je matice vypsána. V závěru programu je očekáván stisk některé klávesy, aby mohl být program ukončen - viz Kód 1.

static void Main(string[] args)
{
    /* Deklarace: 'pocetRadku' ... počet řádků matice; 'pocetSloupcu' ... počet sloupců matice; 
     * 'Max' ... konstantní hodnota maximální velikosti matice pro každou osu (pro 1. vertikální osu 
     * představuje maximální počet řádků matice, pro 2. osu představuje maximální počet sloupců matice; 
     * 'minHodnota' ... přípustná minimální hodnota (dolní mez) prvků matice; 'maxHodnota' ... přípustná 
     * maximální hodnota (horní mez) prvků matice; 'poradiRadku' ... pořadí řádku prvku (využití pro
     * vyhledání minima a maxima matice); 'poradiSloupce' ... pořadí sloupce prvku */
 
    // Maximální velikost matice pro každou osu, tj. řádky, nebo sloupce
    const int Max = 10;
 
    // Metoda pro inicializaci atributů matice a jejich případnou změnu
    Inicializace(Max, out int minHodnota, out int maxHodnota, out int pocetRadku, 
        out int pocetSloupcu, out int[,] pole);
 
    /* Zavolání metody pro plnění matice (náhodnými čísly, jednotlivě zadanými hodnotami, 
     * plnění nulami) */
    PlnitPole(pocetRadku, pocetSloupcu, minHodnota, maxHodnota, pole);
 
    // Výpis matice po jednotlivých řádcích, kde jednotlivé prvky jsou odděleny čárkami
    Console.WriteLine("Výpis matice: ");
    ZobrazitPole(pocetRadku, pocetSloupcu, pole);
 
    // Výpis hodnoty minima matice, včetně jeho pozice v matici
    Console.WriteLine("Minimum v matici: {0} na pozici [{1},{2}] ", 
        MinimumVPoli(pocetRadku, pocetSloupcu, pole, out int indexRadku, out int indexSloupce), indexRadku, indexSloupce);
 
    // Výpis hodnoty maxima matice, včetně jeho pozice v matici
    Console.WriteLine("Maximum v matici: {0} na pozici [{1},{2}] ",
        MaximumVPoli(pocetRadku, pocetSloupcu, pole, out indexRadku, out indexSloupce), indexRadku, indexSloupce);
 
    // Výpis průměru všech prvků matice
    Console.WriteLine("Průměr prvků matice: " + PrumerPole(pocetRadku, pocetSloupcu, pole));
 
    // Vzestupné řazení prvků v jednotlivých řádcích matice podle metody Bubble Sort
    SeraditPole(pocetRadku, pocetSloupcu, pole);
 
    // Výpis seřazené matice
    Console.WriteLine("Seřazená matice: ");
   ZobrazitPole(pocetRadku, pocetSloupcu, pole);
    
    // Transpozice matice podle hlavní diagonály
    HlavniTranspozice(pocetRadku, pocetSloupcu, pole);
 
    // Výpis transponované matice podle hlavní diagonály
    Console.WriteLine("Transpozice matice podle hlavní diagonály: ");
    ZobrazitPole(pocetRadku, pocetSloupcu, pole);
 
    // Transpozice matice podle vedlejší diagonály
    VedlejsiTranspozice(pocetRadku, pocetSloupcu, pole);
 
    // Výpis transponované matice podle vedlejší diagonály
    Console.WriteLine("Transpozice matice podle vedlejší diagonály: ");
    ZobrazitPole(pocetRadku, pocetSloupcu, pole);
 
    // Čekání na stisk klávesy -> ukončení programu
    Console.ReadKey();
}

Kód 1: Program DvourozmernePole - deklarace hlavní statické metody Main 

Vzhledem k vyšší náročnosti na pochopení podstaty metod, rozčleníme zdrojový kód do jednotlivých regionů, které nám umožní sbalovat, nebo rozbalovat obsah jednotlivých regionů. Jedná se o následující regiony:

  • Nastavení atributů pole - region bude obsahovat následující metody, které budou popsány v následujících kapitolách:
    • Inicializace - metoda pro inicializaci a změnu atributů pole 
    • RozmerPole - metoda navracející velikost pole v ose
    • DolniMez - metoda navracející dolní mez intervalu přípustných hodnot prvků matice
    • HorniMez - metoda navracející horní mez intervalu přípustných hodnot prvků matice
  • Plnění pole - region bude obsahovat následující metody:
    • PlnitPole - metoda volající některou z metod plnění matice
    • NahodnePole - metoda pro plnění matice náhodnými čísly
    • Validace - metoda s logickým návratem - validace, zda předaná hodnota náleží intervalu 
    • PlnitJednotlive - metoda pro plnění jednotlivých prvků matice specifikovaných uživatelem
    • NulovatPole - metoda pro plnění prvků matice hodnotou nula
  • Zobrazení pole - region bude obsahovat následující metody:
    • PoleJakoText -  prvky v sloupcích matice jsou převedeny na text a odděleny čárkou, kde každá řádka matice je umístěna na novém řádku ve výstupním textovém řetězci
    • ZobrazitPole - volání metody pro výpis prvků matice do textového řetězce
  • Operace s polem - region bude obsahovat následující metody:
    • MinimumVPoli - metoda navracející hodnotu minima matice - nejmenší prvek
    • MaximumVPoli - metoda navracející hodnotu maxima matice - největší prvek
    • PrumerPole - metoda navracející aritmetický průměr prvků matice
    • HlavniTranspozice - metoda transponující prvky matice podle hlavní diagonály
    • VedlejsiTranspozice - metoda transponující prvky matice podle vedlejší diagonály

Za počáteční značkou regionu #region budeme umísťovat název regionu, např. #region Nastavení atributů pole. Protože kód metod je delší, proto za koncovou značkou regionu, tj. #endregion umístíme také název příslušného regionu, např. #endregion Nastavení atributů pole, abychom rychle zjistili, zda již nejsme v oblasti jiného regionu.