4. Výsledný kód

Následující zdrojový kód je kompletací předešlých kódů programu DvourozmernePole, který je umístěn v souboru Program.cs - viz Kód 1.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace DvourozmernePole
{
    class Program
    {
        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();
        }
 
        #region Nastavení atributů pole
 
        /// <summary>
        /// Metoda pro inicializaci 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];
        }
 
        /// <summary>
        /// Metoda navracející velikost pole v ose
        /// </summary>
        /// <param name="velikost"> aktuální velikost matice v ose </param>
        /// <param name="max"> maximální velikost matice v ose </param>
        /// <returns> Velikost matice v ose </returns>
        static int RozmerPole(int velikost, int max, string text)
        {
            // Deklarace: 'novaHodnota' ... nová velikost matice v ose 
            int novaHodnota;
 
            // Vypsání stávající velikosti matice v ose
            Console.WriteLine("Stávající počet " + text + " matice {0}:", velikost);
 
            // Výzva k zadání velikosti matice v ose 
            Console.Write("Zadejte počet " + text + " matice (1 - {0}): ", max);
 
            // Načtení velikosti matice
            int.TryParse(Console.ReadLine(), out novaHodnota);
 
            // Pokud nová hodnota je větší než maximum, nebo menší než 1 ...
            if ((novaHodnota > max) || (novaHodnota < 1))
            {
                /* Přiřazení maximální velikosti matice do lokální proměnné určující 
                    * velikost matice v ose */
                novaHodnota = max;
                // Vypsání nové velikosti matice v ose
                Console.WriteLine("Redukce počtu " + text + " matice: {0}", novaHodnota);
            }
 
            // Pokud nová velikost matice není stejná jako stávající velikost v ose ...
            if (novaHodnota != velikost)
            {
                // Uložení nové velikosti matice do proměnné
                velikost = novaHodnota;
            }
 
            // Návrat metody
            return velikost;
        }
 
        /// <summary>
        /// Metoda navracející dolní mez intervalu přípustných hodnot prvků matice
        /// </summary>
        /// <param name="minHodnota"> dolní mez prvků matice </param>
        /// <param name="maxHodnota"> horní mez prvků matice </param>
        /// <returns> Dolní mez pro všechny prvky matice </returns>
        public static int DolniMez(int minHodnota, int maxHodnota)
        {
            // Deklarace: 'novaHodnota' ... nová dolní mez prvků matice
            int novaHodnota;
 
            // Výpis stávající hodnoty dolní meze
            Console.WriteLine("Dolní mez prvků pole: {0} (horní mez = {1})", minHodnota, maxHodnota);
 
            // Výzva k zadání nové dolní meze prvků matice
            Console.Write("Zadejte dolní mez prvků pole: ");
 
            // Načtení nové dolní meze prvků matice
            int.TryParse(Console.ReadLine(), out novaHodnota);
 
            // Pokud nová hodnota dolní meze je větší než horní mez, pak...
            if (novaHodnota > maxHodnota)
            {
                // Přiřazení horní meze do lokální proměnné určující dolní mez (horní a dolní mez budou stejné)
                novaHodnota = maxHodnota;
                // Výpis nové redukované dolní meze pro prvky matice
                Console.WriteLine("Redukce dolní meze prvků pole: {0}", novaHodnota);
            }
 
            // Pokud nová dolní mez prvků matice není stejná jako stávající dolní mez prvků matice, pak...
            if (novaHodnota != minHodnota)
            {
                // Přepsání stávající dolní meze prvků matice novou hodnotou
                minHodnota = novaHodnota;
            }
 
            // Návrat metody
            return minHodnota;
        }
 
 
        /// <summary>
        /// Metoda navracející horní mez intervalu přípustných hodnot prvků matice
        /// </summary>
        /// <param name="minHodnota"> dolní mez prvků matice </param>
        /// <param name="maxHodnota"> horní mez prvků matice </param>
        /// <returns> Horní mez pro všechny prvky matice </returns>
        static int HorniMez(int minHodnota, int maxHodnota)
        {
            // Deklarace: 'novaHodnota' ... nová horní mez prvků matice
            int novaHodnota;
 
            // Výpis stávající hodnoty horní meze
            Console.WriteLine("Horní mez prvků pole: {0} (dolní mez = {1})", maxHodnota, minHodnota);
 
            // Výzva k zadání nové horní meze prvků matice
            Console.Write("Zadejte horní mez prvků pole: ");
 
            // Načtení nové horní meze prvků matice
            int.TryParse(Console.ReadLine(), out novaHodnota);
 
            // Pokud nová hodnota horní meze je menší než dolní mez, pak...
            if (novaHodnota < minHodnota)
            {
                // Přiřazení dolní meze do lokální proměnné určující horní mez (horní a dolní mez budou stejné)
                novaHodnota = minHodnota;
                // Výpis nové redukované horní meze pro prvky matice
                Console.WriteLine("Redukce horní meze prvků pole: {0}", novaHodnota);
            }
 
            // Pokud nová horní mez prvků matice není stejná jako stávající horní mez prvků matice, pak...
            if (novaHodnota != maxHodnota)
            {
                // Přepsání stávající horní meze prvků matice novou hodnotou
                maxHodnota = novaHodnota;
            }
 
            // Návrat metody
            return maxHodnota;
        }
 
        #endregion Nastavení atributů pole
 
        #region Plnění pole
 
        /// <summary>
        /// Metoda volající některou z metod plnění matice
        /// </summary>
        /// <param name="m"> počet řádků matice </param>
        /// <param name="n"> počet sloupců matice </param>
        /// <param name="minHodnota"> dolní mez prvků matice </param>
        /// <param name="maxHodnota"> horní mez prvků matice </param>
        /// <param name="pole"> matice, která má být naplněna </param>
        static void PlnitPole(int m, int n, int minHodnota, int maxHodnota, int[,] pole)
        {
            /* Deklarace: 'zpusobPlneni' ... způsob plnění matice('0'...Náhodně, '1'...Jednotlivě, 
             * '2'...Nulovat) */
            int zpusobPlneni;
 
            do
            {
                // Výzva k zadání způsobu plnění matice
                Console.Write("Zvolte způsob plnění pole (0...Náhodně, 1...Jednotlivě, 2...Nulovat): ");
 
                // Načtení způsobu plnění
                int.TryParse(Console.ReadLine(), out zpusobPlneni);
            }
 
            // Načtení způsobu plnění proběhne znovu, pokud nebyl zadán validní celočíselný kód způsobu plnění
            while ((zpusobPlneni != 0) && (zpusobPlneni != 1) && (zpusobPlneni != 2));
 
            // Přepnutí na různý způsob plnění
            switch (zpusobPlneni)
            {
                // Plnění matice náhodnými čísly
                case 0:
                    // Zavolání metody pro plnění matice náhodnými čísly
                    NahodnePole(m, n, minHodnota, maxHodnota, pole);
                    break;
 
                // Plnění matice jednotlivými zadanými hodnotami uživatelem
                case 1:
                    // Volání metody pro plnění matice uživatelem zadanými čísly
                    PlnitJednotlive(m, n, minHodnota, maxHodnota, pole);
                    break;
 
                case 2:
                    // Volání metody, kdy všem prvkům matice je přiřazena hodnotu nula
                    NulovatPole(m, n, pole);
                    break;
            }
        }
 
        /// <summary>
        /// Metoda pro plnění matice náhodnými čísly
        /// </summary>
        /// <param name="m"> aktuální počet řádků matice </param>
        /// <param name="n"> aktuální počet sloupců matice </param>
        /// <param name="minHodnota"> dolní mez prvků matice </param>
        /// <param name="maxHodnota"> horní mez prvků matice </param>
        /// <param name="pole"> matice, který má být naplněna </param>
        static void NahodnePole(int m, int n, int minHodnota, int maxHodnota, int[,] pole)
        {
            /* Deklarace: 'rnd' ... náhodné číslo (generované na základě rovnoměrného rozdělení); 
             * 'i' ... index řádku prvku matice, 'j' ... index sloupce prvku matice */
 
            // Deklarace náhodného čísla (objektu) včetně inicializace
            Random rnd = new Random();
 
            // Pro všechny řádky matice od '0' (počátečního) do 'm-1'-tého (posledního) řádku
            for (int i = 0; i < m; i++)
            {
                // Pro všechny sloupce matice od '0' (počátečního) do 'n-1'-tého (posledního) sloupce
                for (int j = 0; j < n; j++)
                    /* Vygenerování náhodného čísla uloženého do 'rnd' v rozsahu 'minHodnota' až 'maxHodnota'
                     * Přiřazení náhodného čísla do aktuálního prvku */
                    pole[i, j] = rnd.Next(minHodnota, maxHodnota + 1);
            }
        }
 
        /// <summary>
        /// Metoda s logickým návratem - validace, zda předaná hodnota náleží intervalu 
        /// </summary>
        /// <param name="hodnota"> předaná hodnota </param>
        /// <param name="minRozmer"> dolní mez intervalu </param>
        /// <param name="maxRozmer"> horní mez intervalu </param>
        /// <returns> Logická informace, zda předaná hodnota náleží intervalu povolených hodnot
        /// </returns>
        static bool Validace(int hodnota, int dolniMez, int horniMez)
        {
            // Informace, že předaná hodnota je validní
            bool validni = true;
 
            // Test, zda načtená hodnota je mimo interval povolených hodnot ...
            if ((hodnota < dolniMez) || (hodnota > horniMez))
            {
                // Výpis o chybě
                Console.WriteLine("Zadaná hodnota je mimo povolené meze <{0}, {1}>", dolniMez, horniMez);
                    
                // Hodnota není validní
                validni = false;
            }
 
            // Návrat metody
            return validni;
        }
 
 
        /// <summary>
        /// Metoda pro plnění jednotlivých prvků matice specifikovaných uživatelem
        /// </summary>
        /// <param name="m"> aktuální počet řádků matice </param>
        /// <param name="n"> aktuální počet sloupců matice </param>
        /// <param name="minHodnota"> dolní mez prvků matice </param>
        /// <param name="maxHodnota"> horní mez prvků matice </param>
        /// <param name="pole"> matice, který má být naplněna </param>
        static void PlnitJednotlive(int m, int n, int minHodnota, int maxHodnota, int[,] pole)
        {
            /* Deklarace: 'indexRadku' ... index řádku prvku, který má být naplněn; 'indexSloupce' ... index 
             * sloupce prvku, který má být naplněn; 'hodnota' ... hodnota prvku, který má být naplněn; 
             * 'plnit' ... informace, zda má zadán (naplněn) další prvek ('true'...Ano, 'false'...Ne) */
            int indexRadku, indexSloupce, hodnota; 
            bool plnit;
 
            /* Cyklus s podmínkou na konci pro načtení indexu řádku plněného prvku - první souřadnice
             * prvku, od kterého lze postupně plnit další prvky matice */
            do
            {
                // Výzva k zadání indexu řádku plněného prvku
                Console.Write("Zadejte index řádku u prvku, který chcete naplnit (0 - {0}): ", m - 1);
 
                // Načtení indexu řádku
                int.TryParse(Console.ReadLine(), out indexRadku);
            }
            /* Podmínka cyklu, zda načtený index řádku je mimo meze. Pokud ano, opakování 
             * načtení indexu řádku */
            while (!Validace(indexRadku, 0, m-1));
 
            // Cyklus s podmínkou na konci pro načtení indexu sloupce plněného prvku 
            do
            {
                // Výzva k zadání pořadového čísla sloupce plněného prvku
                Console.Write("Zadejte index sloupce u prvku, který chcete naplnit (0 - {0}): ", n - 1);
 
                // Načtení indexu sloupce
                int.TryParse(Console.ReadLine(), out indexSloupce);
            }
            /* Podmínka cyklu, zda načtený index sloupce je mimo meze. Pokud ano, opakovaní 
             * načtení indexu sloupce */
            while (!Validace(indexSloupce, 0, n-1));
 
            // Matice má být plněna prvky zadanými uživatelem
            plnit = true;
            // Cyklus s podmínkou na konci pro plnění prvků matice
            do
            {
                // Cyklus s podmínkou na konci - validace zadané hodnoty zda je hodnota mimo rozsah intervalu 
                do
                {
                    /* Výzva k zadání hodnoty prvku, včetně vypsání dolní a horní meze včetně indexu 
                     * řádku a sloupce v hranatých závorkách */
                    Console.Write("Zadejte hodnotu prvku ({0} - {1}) na pozici [{2}, {3}]: ", minHodnota.ToString(),
                        maxHodnota.ToString(), indexRadku.ToString(), indexSloupce.ToString());
 
                    // Načtení hodnoty prvku
                    int.TryParse(Console.ReadLine(), out hodnota);
                }
                /* Podmínka cyklu, zda načtená hodnota prvku je mimo meze. Pokud ano, opakovaní 
                 * načtení hodnoty */
                while (!Validace(hodnota, minHodnota, maxHodnota));
 
                // Přiřazení hodnoty z lokální proměnné do prvku matice na určenou pozici
                pole[indexRadku, indexSloupce] = hodnota;
 
                // Pokud bylo dosaženo posledního řádku a posledního sloupce, pak...
                if ((indexRadku == m - 1) && (indexSloupce == n - 1))
                    // Zastavení plnění matice
                    plnit = false;
                    
                // Pokud index sloupce je menší než celkový počet sloupců - 1, pak...
                if (indexSloupce < n - 1)
                {
                    //zvýšení indexu sloupce o 1
                    indexSloupce++;
                }
                // Jinak ...
                else
                {
                    // Pokud index řádku je menší než celkový počet řádků - 1, pak...
                    if (indexRadku < m - 1)
                    {
                        // Zvýšení indexu řádku o 1
                        indexRadku++;
                        // Přiřazení 0 do indexu sloupce
                        indexSloupce = 0;
                    }
                }
            }
 
            /* Podmínka cyklu, zda má být provedeno další načtení prvku. Pokud ano (hodnota 'true'), 
             * opakovaní načtení hodnoty */
            while (plnit == true);
        }
 
        /// <summary>
        /// Metoda pro plnění prvků matice hodnotou nula
        /// </summary>
        /// <param name="m"> počet řádků matice </param>
        /// <param name="n"> počet sloupců matice </param>
        /// <param name="pole"> Matice, která má být naplněna </param>
        static void NulovatPole(int m, int n, int[,] pole)
        {
            /* Pro všechny řádky od počátečního do posledního řádku matice;
             * 'i' ... index (pozice) řádku matice */
            for (int i = 0; i < m; i++)
            {
                // Pro všechny sloupce
                for (int j = 0; j < n; j++)
                {
                    // Přiřazení nuly prvku na pozici [i,j]
                    pole[i, j] = 0;
                }
            }
        }
 
        #endregion Plnění pole
 
        #region Zobrazení pole
 
        /// <summary>
        /// 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
        /// </summary>
        /// <param name="m"> počet řádků matice </param>
        /// <param name="n"> počet sloupců matice </param>
        /// <param name="pole"> matice </param>
        /// <returns> výstupní textový řetezec s prvky matice </returns>     
        static string PoleJakoText(int m, int n, int[,] pole)
        {
            /* Lokální proměnná: 'vystup' - výsledek převodu na text - inicializace 
             * a vložení nového řádku */
            string vystup = "";
 
            // Procházení řádků matice
            for (int i = 0; i < m; i++)
            {
                // Procházení sloupců matice
                for (int j = 0; j < n; j++)
                {
                    // Převod hodnoty prvku na text včetně připojení čárky
                    vystup += string.Format("{0:D3}, ", pole[i, j]);
                }
                // Přidání odstavce na konci každého řádku (také možnost vložení "\n")
                vystup += Environment.NewLine;
            }
            // Návrat výsledného textového řetězce
            return vystup;
        }
 
        /// <summary>
        /// Volání metody pro výpis prvků matice do textového řetězce
        /// </summary>
        /// <param name="m"> počet řádků matice </param>
        /// <param name="n"> počet sloupců matice </param>
        /// <param name="pole"> vypisovaná matice </param>
        static void ZobrazitPole(int m, int n, int[,] pole)
        {
            // Zavolání metody pro výpis matice do textového řetězce
            Console.Write(PoleJakoText(m, n, pole));
        }
 
        #endregion Zobrazení pole
 
        #region Operace s polem
 
        /// <summary>
        /// Návrat hodnoty minima matice - nejmenší prvek
        /// </summary>
        /// <param name="m"> počet řádků matice </param>
        /// <param name="n"> počet sloupců matice </param>
        /// <param name="pole"> prohledávaná matice </param>
        /// <param name="indexRadku"> index řádku minima </param>
        /// <param name="indexSloupce"> index sloupce minima </param>
        /// <returns> Minimum matice </returns>
        static int MinimumVPoli(int m, int n, int[,] pole, out int indexRadku, out int indexSloupce)
        {
            /* Deklarace: 'minimum' ... nalezená minimální hodnota v matici; 'i' ... index řádku 
             * matice; 'j' ... index sloupce matice */
            int minimum;
 
            // Hodnotu počátečního prvku prohlásíme minimem
            minimum = pole[0, 0];
 
            // Přiřazení hodnoty 0 do indexu řádku minima
            indexRadku = 0;
 
            // Přiřazení hodnoty 0 do indexu sloupce minima
            indexSloupce = 0;
 
            // Pro všechny řádky matice
            for (int i = 0; i < m; i++)
            {
                // Pro všechny sloupce matice
                for (int j = 0; j < n; j++) 
                {
                    // Pokud je aktuálně procházený prvek menší než minimum, pak...
                    if (pole[i, j] < minimum)
                    {
                        // Uložené aktuálního prvku do minima
                        minimum = pole[i, j];
 
                        // Přiřazení indexu aktuálního řádku do indexu řádku minima
                        indexRadku = i;
 
                        //přiřazení indexu aktuálního sloupce do indexu sloupce minima
                        indexSloupce = j;
                    }
                }
            }
 
            // Přiřazení minima návratu metody
            return minimum;
        }
 
        /// <summary>
        /// Návrat hodnoty maxima matice - největší prvek
        /// </summary>
        /// <param name="m"> počet řádků matice </param>
        /// <param name="n"> počet sloupců matice </param>
        /// <param name="pole"> prohledávaná matice </param>
        /// <param name="indexRadku"> index řádku maxima </param>
        /// <param name="indexSloupce"> index sloupce maxima </param>
        /// <returns> Maximum matice </returns>
        static int MaximumVPoli(int m, int n, int[,] pole, out int indexRadku, out int indexSloupce)
        {
            /* Deklarace: 'maximum' ... nalezená maximální hodnota v matici;  'i' ... index řádku 
            *matice; 'j'... index sloupce matice */
            int maximum;
 
            // Hodnotu prvního prvku prohlásíme maximem
            maximum = pole[0, 0];
 
            // Přiřazení hodnoty 0 do indexu řádku maxima
            indexRadku = 0;
 
            // Přiřazení hodnoty 0 do indexu sloupce maxima
            indexSloupce = 0;
 
            // Pro všechny řádky matice
            for (int i = 0; i < m; i++)
            {
                // Pro všechny sloupce matice
                for (int j = 0; j < n; j++)
                {
                    // Pokud je aktuálně procházený prvek menší než maximum, pak...
                    if (pole[i, j] > maximum)
                    {
                        // Uložené aktuálního prvku do maxima
                        maximum = pole[i, j];
 
                        // Přiřazení indexu aktuálního řádku do indexu řádku maxima
                        indexRadku = i;
 
                        //přiřazení indexu aktuálního sloupce do indexu sloupce maxima
                        indexSloupce = j;
                    }
                }
            }
 
            // Přiřazení maxima návratu metody
            return maximum;
        }
 
 
        /// <summary>
        /// Návrat aritmetického průměru prvků matice
        /// </summary>
        /// <param name="m"> počet řádků matice </param>
        /// <param name="n"> počet sloupců matice </param>
        /// <param name="pole"> matice </param>
        /// <returns> Průměr matice </returns>
        static double PrumerPole(int m, int n, int[,] pole)
        {
            /* Deklarace: 'prumer' ... průměrná reálná hodnota ze všech prvků matice; 
             * 'suma' ... suma hodnot všech prvků matice; i' ... index řádku matice; 
             * 'j' ... index sloupce matice */
            double prumer;
            int suma;
 
            // Inicializace - suma prvků je 0
            suma = 0;
 
            // Pro všechny řádky matice
            for (int i = 0; i < m; i++)
            {
                // Pro všechny sloupce matice
                for (int j = 0; j < n; j++)
                {
                    // Přičtení dalšího prvku vektoru do sumy
                    suma += pole[i, j];
                }
            }
 
            // Výpočet reálného průměru včetně přetypování
            prumer = (double)suma / (m * n);
 
            // Přiřazení vypočteného průměru návratu metody
            return prumer;
        }
 
        /// <summary>
        /// Vzestupné řazení prvků řádků matice
        /// </summary>
        /// <param name="m"> počet řádků matice </param>
        /// <param name="n"> počet sloupců matice </param>
        /// <param name="pole"> matice, kde prvky v každém řádku mají být setříděny vzestupně </param>
        static void SeraditPole(int m, int n, int[,] pole)
        {
            /* Deklarace: 'pom' ... pomocná proměnná pro dočasné uložení prvku; 'b' ... logická proměnná 
             * obsahující informaci, zda došlo k prohození některých sousedních prvků; 'i' ... index řádku 
             * matice; 'j' ... index sloupce matice */
            int pom;
            bool b;
 
 
            // Pro všechny řádky matice
            for (int i = 0; i < m; i++)
            {
                // Opakuj tak dlouho u každé řádky, dokud bude docházet k prohození prvků
                do
                {
                    // Nedošlo k prohození sousedních prvků
                    b = false;
                    // Pro všechny sloupce matice
                    for (int j = 0; j < n - 1; j++)
                    {
                        /* Pokud je hodnota sousedícího prvku větší než hodnota aktuálně
                         * testovaného prvku, pak... */
                        if (pole[i, j] > pole[i, j + 1])
                        {
                            // Ulož hodnotu aktuálního prvku do pomocné proměnné
                            pom = pole[i, j];
 
                            // Ulož hodnotu sousedícího prvku do aktuálního prvku
                            pole[i, j] = pole[i, j + 1];
 
                            // Ulož hodnotu z pomocné proměnné do sousedícího prvku
                            pole[i, j + 1] = pom;
 
                            // Došlo k prohození sousedních prvků
                            b = true;
                        }
                    }
                }
                // Testování, zda došlo k prohození některých sousedních prvků
                while (b == true);
            }
        }
 
        /// <summary>
        /// Transpozice prvků matice podle hlavní diagonály
        /// </summary>
        /// <param name="m"> počet řádků matice </param>
        /// <param name="n"> počet sloupců matice </param>
        /// <param name="pole"> matice, kde jsou prvky otočeny podle hlavní diagonály </param>
        static void HlavniTranspozice(int m, int n, int[,] pole)
        {
            /* Deklarace: 'pom' ... pomocná proměnná pro přesun osově souměrných prvků matice podle 
             * hlavní diagonály; 'i' ... index řádku matice; 'j' ... index sloupce matice */
            int pom;
 
            // Pokud počet řádek není roven počtu sloupců (matice není symetrická), pak...
            if (m != n)
            {
                // Výpis varovného upozornění
                Console.WriteLine("Nelze transponovat obdélníkovou matici");
                // Ukončení metody
                return;
            }
            // Jinak ...
            else
            {
                // Od počátečního až předposledního řádku matice
                for (int i = 0; i < m - 1; i++)
                {
                    // Od i + 1-tého sloupce do posledního sloupce matice
                    for (int j = i + 1; j < m; j++)
                    {
                        // Uložení aktuálního prvku matice na pozici [i,j] do pomocné proměnné
                        pom = pole[i, j];
                       
                        /* Přepsání aktuálního prvku matice na pozici [i,j] osově souměrným prvkem
                         * podle hlavní diagonály, tj. na pozici [j,i] */
                        pole[i, j] = pole[j, i];
                       
                        /* Přepsání osově souměrného prvku na pozici [j,i] prvkem uloženým
                         * v pomocné proměnné */
                        pole[j, i] = pom;
                    }
                }
            }
        }
 
        /// <summary>
        /// Transpozice prvků matice podle vedlejší diagonály
        /// </summary>
        /// <param name="m"> počet řádků matice </param>
        /// <param name="n"> počet sloupců matice </param>
        /// <param name="pole"> matice, kde jsou prvky otočeny podle vedlejší diagonály </param>
        static void VedlejsiTranspozice(int m, int n, int[,] pole)
        {
            /* Deklarace: 'pom' ... pomocná proměnná pro přesun osově souměrných prvků matice podle 
             * vedlejší diagonály; 'i' ... index řádku matice; 'j' ... index sloupce matice */
            int pom;
 
            // Pokud počet řádek není roven počtu sloupců (matice není symetrická), pak...
            if (m != n)
            {
                // Výpis varovného upozornění
                Console.WriteLine("Nelze transponovat obdélníkovou matici");
                // Ukončení metody
                return;
            }
            // Jinak ...
            else
            {
                // Od počátečního až předposledního řádku matice
                for (int i = 0; i < m - 1; i++)
                {
                    // Od i + 1-tého sloupce do posledního sloupce matice
                    for (int j = 0; j < m - i; j++)
                    {
                        // Uložení aktuálního prvku matice na pozici [i,j] do pomocné proměnné
                        pom = pole[i, j];
 
                        /* Přepsání aktuálního prvku matice na pozici [i,j] osově souměrným prvkem
                         * podle vedlejší diagonály, tj. na pozici [m-j-1,m-i-1] */
                        pole[i, j] = pole[m - j - 1, m - i - 1];
 
                        /* Přepsání osově souměrného prvku na pozici [m-j-1, m-i-1] prvkem uloženým
                         * v pomocné proměnné */
                        pole[m - j - 1, m - i - 1] = pom;
                    }
                }
            }
        }
 
        #endregion Operace s polem
    }
}

Kód 1: Program DvourozmernePole - deklarace hlavní statické metody Main včetně deklarací dalších metod