Dvourozměrné pole - konzole
3. C#
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
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.