Dvourozměrné pole - konzole
3. C#
3.1. Nastavení atributů pole
První metodou regionu Nastavení atributů pole je metoda bez návratu s názvem Inicializace - viz Kód 1. Tato metoda je volána v hlavní metodě. Tato metoda bez návratu slouží pro inicializaci (nastavení počátečních hodnot) atributů matice. Metoda přijímá jako první parametr konstantu Max deklarovanou a inicializovanou v hlavní metodě. V metodě jsou deklarovány základní atributy dvourozměrného pole pomocí výstupních parametrů:
- pocetRadku - počet řádků matice
- pocetSloupcu - počet sloupců matice
- minHodnota - přípustná minimální hodnota (dolní mez) prvků matice
- maxHodnota - přípustná maximální hodnota (horní mez) prvků matice
- pole - dvourozměrné pole, tj. matice
Po provedení inicializace všech vyjmenovaných atributů matice jsou vypsány nastavené hodnoty atributů matice. Každý atribut je vypsán na novém řádku pomocí vložení řídícího znaku \n do textového řetězce. Jak si můžete všimnout, ve výpisu jsme také pro přechod na druhý řádek využili volání vlastnosti NewLine třídy Environment (třída je podtřídou třídy System). V dalším kroku poskytneme uživateli možnost změnit atributy matice. Tuto možnost provedeme na základě použití cyklu s podmínkou na konci, tzn. že uživatel má možnost měnit různé atributy matice. Pokud zvolil možnost změny atributu, je načten index atribut pomocí něhož je ve vícenásobném větvení (příkaz switch) volána příslušná metoda pro změnu atributu. Index atribut je pomocí cyklu s podmínkou na konci validován zda jeho hodnota náleží povolenému intervalu hodnot celých čísel od 0 do 3.
První možnou volanou metodou pro změnu velikosti dvourozměrné pole pro každou osu, je metoda RozmerPole. Tato metoda s celočíselným návratem určuje velikost v dané ose matice. Metoda přijímá tři parametry - stávající počet prvků matice v dané ose, maximální přípustnou hranicí velikosti pole v ose, tj. Max a jako poslední parametr je předán text, který je použit ve výzvách pro zadání velikosti pole ve vybrané ose (jedná se buď o řádky, nebo o sloupce).
V případě, že hodnota uložená v proměnné atribut je rovna 0, bude návrat volané metody uložen do proměnné pocetRadku, tzn. bude určen počet řádků matice.
Pokud je index atribut roven 1, bude pomocí metody RozmerPole navrácen počet sloupců, který bude uložen do proměnné pocetSloupcu.
Pro specifikaci dolní meze, tj. minimální hodnoty, které může prvek matice nabýt, využijeme volání metody DolniMez, jejíž celočíselný výstup uložíme do proměnné minHodnota. Tento krok je proveden, pokud index atribut je roven 2.
Naproti tomu horní mez je uložena v proměnné maxHodnota, jejíž hodnota je návratem volané metody HorniMez, pokud index atribut je roven 3.
Pokud uživatel již nechce měnit žádný z atributů matice, je vytvořeno dvourozměrné pole pomocí implicitního konstruktoru na základě zadaných atributů týkajících se velikosti pole v každé ose, tj. počtu řádků a sloupců.
/// <summary> /// Metoda pro incializaci a změnu atributů pole /// </summary> static void Inicializace(int Max, out int minHodnota, out int maxHodnota, out int pocetRadku, out int pocetSloupcu, out int[,] pole) { // Dolní mez, které může nabýt prvek matice minHodnota = 1; // Horní mez, které může nabýt prvek matice maxHodnota = 100; // Počet řádků je roven horní mezi přípustného počtu řádků pocetRadku = Max; // Počet sloupců je roven horní mezi přípustného počtu sloupců pocetSloupcu = Max; // Výpis stávajících atributů matice Console.WriteLine("Matice je nastavena:" + Environment.NewLine + " Počet řádků: {0} \n Počet sloupců: {1} \n Dolní mez: {2} \n Horní mez: {3}", pocetRadku, pocetSloupcu, minHodnota, maxHodnota); // Index pro změnu atributů matice int zmena; do { // Výzva ke změně atributů matice Console.Write("Změnit nastavení atributů matice? (0...Ne, 1...Ano): "); // Načtení hodnoty, zda má dojít ke změně int.TryParse(Console.ReadLine(), out zmena); // Pokud má být atribut matice změněn, pak prováděj... while (zmena == 1) { // Index atributu ke změně int atribut; do { // Výzva k zadání indexu změny atributu matice Console.Write("Zvolte změnu atributu matice " + "(0...Počet řádků, 1...Počet sloupců, 2...Dolní mez, 3...Horní mez): "); // Načtení indexu změny atributu int.TryParse(Console.ReadLine(), out atribut); } /* Načtení indexu změny atributu matice proběhne znovu, pokud nebyl * zadán validní index změny atributu */ while ((atribut != 0) && (atribut != 1) && (atribut != 2) && (atribut != 3)); // Přepnutí do změny příslušného atributu matice switch (atribut) { // Změna počtu řádků matice case 0: // Zavolání metody s celočíselným návratem pro změnu počtu řádků pocetRadku = RozmerPole(pocetRadku, Max, "řádků"); break; // Změna počtu sloupců matice case 1: // Zavolání metody s celočíselným návratem pro změnu počtu sloupců pocetSloupcu = RozmerPole(pocetSloupcu, Max, "sloupců"); break; // Změna dolní meze prvků matice case 2: /* Zavolání metody s celočíselný návratem pro změnu dolní meze, které * mohou nabývat prvky matice */ minHodnota = DolniMez(minHodnota, maxHodnota); break; // Změna horní meze prvků matice case 3: /* Zavolání metody s celočíselným návratem pro změnu horní meze, které * mohou nabývat prvky matice */ maxHodnota = HorniMez(minHodnota, maxHodnota); break; } // Výzva ke změně atributů matice Console.Write("Změnit další nastavení atributů matice? (0...Ne, 1...Ano): "); // Načtení hodnoty, zda má dojít k další změně int.TryParse(Console.ReadLine(), out zmena); } } // Pokud načtená hodnota nebyla validní, cyklus zadání je znovu opakován while ((zmena < 0) || (zmena > 1)); // Deklarace a vytvoření instance matice se zadanými rozměry (počtem prvků pro každou osu) pole = new int[pocetRadku, pocetSloupcu]; }
Kód 1: Deklarace statické metody bez návratu s názvem Incializace