5. Výsledný kód

XAML kód

Výsledný XAML kód formuláře (MainWindow.xaml) - viz Kód 1.

<Window x:Class="DvourozmernePoleWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DvourozmernePoleWPF"
        mc:Ignorable="d"
        Title="Základní práce s maticí" Height="850" Width="850" MinHeight="800" MinWidth="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <!-- Nastavení matice -->
        <GroupBox Header="Nastavení matice">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Label Content="Matice" FontSize="18" FontWeight="Bold" HorizontalAlignment="Center" />
                <Grid Grid.Row="1">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <!-- Rozměry matice -->
                    <GroupBox Header="Rozměry matice">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="Auto"/>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                            </Grid.ColumnDefinitions>
                            <Label Content="Počet řádků:" VerticalAlignment="Center"/>
                            <TextBox Name="TxtPocetRadku" Grid.Column="1" Width="100" Margin="5" Padding="5" 
                                     LostFocus="TxtPocetRadku_LostFocus"/>
                            <Label Content="Počet sloupců:" Grid.Row="1" VerticalAlignment="Center"/>
                            <TextBox Name="TxtPocetSloupcu" Grid.Row="1" Grid.Column="1" Width="100" Margin="5" Padding="5" 
                                     LostFocus="TxtPocetSloupcu_LostFocus"/>
                        </Grid>
                    </GroupBox>
                    <!-- Hodnoty - meze -->
                    <GroupBox Header="Hodnoty - meze" Grid.Column="1">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="Auto"/>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                            </Grid.ColumnDefinitions>
                            <Label Content="Minimum:" VerticalAlignment="Center"/>
                            <TextBox Name="TxtMinHodnota" Grid.Column="1" Width="100" Margin="5" Padding="5" 
                                     LostFocus="TxtMinHodnota_LostFocus"/>
                            <Label Content="Maximum:" Grid.Row="1" VerticalAlignment="Center"/>
                            <TextBox Name="TxtMaxHodnota" Grid.Row="1" Grid.Column="1" Width="100" Margin="5" Padding="5" 
                                     LostFocus="TxtMaxHodnota_LostFocus"/>
                        </Grid>
                    </GroupBox>
                    <!-- Prvek v matici -->
                    <GroupBox Header="Prvek v matici" Grid.Column="3">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="Auto"/>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                            </Grid.ColumnDefinitions>
                            <Label Content="Index řádku:" Grid.Row="0" Grid.Column="0"/>
                            <TextBox Name="TxtPrvekIndexRadku" Grid.Row="0" Grid.Column="1" Width="100" Margin="5" Padding="5" 
                                     LostFocus="TxtPrvekIndexRadku_LostFocus"/>
                            <Label Content="Index sloupce:" Grid.Row = "1" Grid.Column="0"/>
                            <TextBox Name="TxtPrvekIndexSloupce" Grid.Row="1" Grid.Column="1" Width="100" Margin="5" Padding="5" 
                                     LostFocus="TxtPrvekIndexSloupce_LostFocus"/>
                            <Label Content="Hodnota:" Grid.Row="0" Grid.Column="2"/>
                            <TextBox Name="TxtHodnota" Grid.Row="0" Grid.Column="3" Width="100" Margin="5" Padding="5" 
                                     LostFocus="TxtHodnota_LostFocus"/>
                        </Grid>
                    </GroupBox>
                </Grid>
            </Grid>
        </GroupBox>
        <!-- Zobrazení matice -->
        <GroupBox Header="Zobrazení matice" Grid.Row="1">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <!-- Matice -->
                <GroupBox Header="Mřížka" Margin="5" MinHeight="100">
                    <ListView Name="LstMatice" ScrollViewer.VerticalScrollBarVisibility="Auto"/>
                </GroupBox>
                <!-- Výsledek -->
                <GroupBox Header="Jako text (nebo výpis výsledku)" Grid.Column="2" Margin="5">
                    <TextBox Name="TxtVysledek" Margin="5" ScrollViewer.HorizontalScrollBarVisibility="Visible" 
                        ScrollViewer.VerticalScrollBarVisibility="Visible" IsReadOnly="True" Background="AliceBlue"/>
                </GroupBox>
            </Grid>
        </GroupBox>
        <!-- Tlačítka - sekce: Plnit, Výstup, Výpočet -->
        <StackPanel Grid.Row="4">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <!-- Plnit -->
                <StackPanel >
                    <Label Content="Plnit:" FontWeight="Bold" FontSize="16" HorizontalAlignment="Center"/>
                    <Button Name="BtnNahodne" Content="Náhodně" Margin="5" Padding="10,5" Click="BtnNahodne_Click"/>
                    <Button Name="BtnJednotlive" Content="Jednotlivě" Margin="5" Padding="10,5" Click="BtnJednotlive_Click"/>
                    <Button Name="BtnNulovat" Content="Nulovat" Margin="5" Padding="10,5" Click="BtnNulovat_Click"/>
                </StackPanel>
                <!-- Výstup -->
                <StackPanel Grid.Column="1">
                    <Label Content="Výstup:" FontWeight="Bold" FontSize="16" HorizontalAlignment="Center"/>
                    <Button Name="BtnJakoText" Content="Jako text"  Margin="5" Padding="10,5" Click="BtnJakoText_Click"/>
                    <Button Name="BtnDoMrizky" Content="Do mřížky" Margin="5" Padding="10,5" Click="BtnDoMrizky_Click"/>
                </StackPanel>
                <!-- Výpočet -->
                <StackPanel Grid.Column="2">
                    <Label Content="Výpočet:" FontWeight="Bold" FontSize="16" HorizontalAlignment="Center"/>
                    <Button Name="BtnMinimum" Content="Minimum"  Margin="5" Padding="10,5" Click="BtnMinimum_Click"/>
                    <Button Name="BtnMaximum" Content="Maximum" Margin="5" Padding="10,5" Click="BtnMaximum_Click"/>
                    <Button Name="BtnPrumer" Content="Průměr" Margin="5" Padding="10,5" Click="BtnPrumer_Click"/>
                    <Button Name="BtnSeradit" Content="Seřadit" Margin="5" Padding="10,5" Click="BtnSeradit_Click"/>
                    <Button Name="BtnTranspoziceHlavni" Content="Transpozice - hlavní diagonála" Margin="5" Padding="10,5" 
                            Click="BtnTranspoziceHlavni_Click"/>
                    <Button Name="BtnTranspoziceVedlejsi" Content="Transpozice - vedlejší diagonála" Margin="5" Padding="10,5" 
                            Click="BtnTranspoziceVedlejsi_Click"/>
                </StackPanel>
            </Grid>
            <!-- Konec -->
            <WrapPanel HorizontalAlignment="Right">
                <Button Name="BtnKonec" Content="Konec" Margin="5" Width="100" Padding="5" Click="BtnKonec_Click"/>
            </WrapPanel>
        </StackPanel>
    </Grid>
</Window>

Kód 1: Výsledný XAML kód vytvořeného formuláře


C# kód

Code Behind - C# kód pro veškeré události vyvolané uživatelem při manipulaci s aplikací (MainWindow.xaml.cs) - viz Kód 2.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
namespace DvourozmernePoleWPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        #region Datové složky třídy (globální proměnné)
 
        /* Specifikace konstanty pro maximální vertikální (počet řádků) a horizontální
         * (počet sloupců) rozměr matice - inicializace */
        const int Max = 10;
        // Aktuální rozměr pole - počet řádků
        private int pocetRadku;
        // Aktuální rozměr pole - počet sloupců
        private int pocetSloupcu;
        // Přípustná minimální hodnota (dolní mez) prvku - inicializace
        private int minHodnota = 1;
        // Přípustná maximální hodnota (horní mez) prvku - inicializace
        private int maxHodnota = 100;
 
        // Deklarace dvourozměrného pole - matice
        private int[,] pole;
 
        #endregion Datové složky třídy
 
        public MainWindow()
        {
            InitializeComponent();
 
            //Inicializace atributů pole a prvků na formuláři
            Inicializace();
        }
 
        #region Pomocné metody    
 
        #region Nastavení atributů pole
 
        /// <summary>
        /// Inicializace atributů pole a prvků na formuláři
        /// </summary>
        private void Inicializace()
        {
            // Přiřazení maximálního počtu řádků matice do datové složky 
            this.pocetRadku = Max;
 
            // Přiřazení maximálního počtu sloupců matice do datové složky 
            this.pocetSloupcu = Max;
 
            // Vytvoření instance (objektu) matice s definovanými rozměry
            this.pole = new int[this.pocetRadku, this.pocetSloupcu];
 
            // Přiřazení počtu řádků matice do objektu na formuláři 
            this.TxtPocetRadku.Text = this.pocetRadku.ToString();
 
            // Přiřazení počtu sloupců matice do objektu na formuláři 
            this.TxtPocetSloupcu.Text = this.pocetSloupcu.ToString();
 
            /* Přiřazení přípustné minimální hodnoty prvku v matici do objektu 
             * na formuláři určujícího mezní hodnotu */
            this.TxtMinHodnota.Text = this.minHodnota.ToString();
 
            /* Přiřazení přípustné maximální hodnoty prvku v matici do objektu (pole) 
             * na formuláři určujícího mezní hodnotu */
            this.TxtMaxHodnota.Text = this.maxHodnota.ToString();
        }
 
        #endregion Nastavení atributů pole
 
        #region Plnění pole
 
        /// <summary>
        /// Metoda pro plnění prvků matice náhodnými čísly
        /// </summary>
        /// <param name="n"> počet prvků pole </param>
        /// <param name="minh"> minimální celočíselná hodnota prvku </param>
        /// <param name="maxh"> maximální celočíselná hodnota prvku </param>
        /// <param name="pole"> matice </param>
        private void NahodnePole(int m, int n, int minh, int maxh, int[,] pole)
        {
            // Vytvoření instance generátoru náhodného čísla
            Random rnd = new Random();
 
            // Cyklus s pevným krokem - pro procházení řádků matice
            for (int i = 0; i < m; i++)
            {
                // Cyklus s pevným krokem - pro procházení sloupců matice
                for (int j = 0; j < n; j++)
                {
                    // Přiřazení náhodného čísla v rozmezí intervalu u prvku na pozici [i, j]
                    pole[i, j] = rnd.Next(minh, maxh + 1);
                }
            }
        }
 
        /// <summary>
        /// Metoda pro nulování prvků v matici
        /// </summary>
        /// <param name="m"> počet řádků matice </param>
        /// <param name="n"> počet sloupců matice </param>
        /// <param name="pole"> matice </param>
        private void NulovatPole(int m, int n, int[,] pole)
        {
            // Cyklus s pevným krokem - pro procházení řádků matice
            for (int i = 0; i < m; i++)
            {
                // Cyklus s pevným krokem - pro procházení sloupců matice
                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 v objektu
        /// </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>     
        private 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>
        /// Zobrazení matice na formuláři jako text v objektu typu TextBox
        /// </summary>
        /// <param name="m"> počet řádků matice </param>
        /// <param name="n"> počet sloupců matice </param>
        /// <param name="pole"> matice </param>
        private void ZobrazitPoleJakoText(int m, int n, int[,] pole)
        {
            // Výpis matice v objektu typu TextBox na formuláři
            this.TxtVysledek.Text = this.PoleJakoText(m, n, pole);
        }
 
        /// <summary>
        /// Zobrazení prvků matice na formuláři v objektu typu ListView
        /// </summary>
        /// <param name="m"> počet řádků matice </param>
        /// <param name="n"> počet sloupců matice </param>
        /// <param name="pole"> matice </param>
        private void ZobrazitPoleVListView(int m, int n, int[,] pole)
        {
            // Lokální proměnná: 'radka' - řádka matice převedená na text
            string radka;
            // Vymazání předchozí obsahu (přidaných prvků)
            this.LstMatice.Items.Clear();
            // Procházení řádků matice
            for (int i = 0; i < m; i++)
            {
                // Vymazání předchozího obsahu řádky (textového řetězce)
                radka = "";
                // Procházení sloupců matice
                for (int j = 0; j < n; j++)
                {
                    // Převod hodnoty prvku na text včetně připojení čárky
                    radka += string.Format("{0:D3}, ", pole[i, j]);
                }
                // Přidání textového řetězce (řádky matice) do obsahu objektu
                this.LstMatice.Items.Add(radka);
            }
        }
        #endregion Zobrazení pole
 
        #region Operace s polem
 
        /// <summary>
        /// Metoda pro hledání nejmenšího prvku v matici
        /// </summary>
        /// <param name="m"> počet řádků matice </param>
        /// <param name="n"> počet sloupců matice </param>
        /// <param name="pole"> matice </param>
        /// <param name="indexRadkuMinima"> index řádku minima </param>
        /// <param name="indexSloupceMinima"> index sloupce minima </param>
        /// <returns> celočíselná hodnota minima </returns>
        private int MinimumVPoli(int m, int n, int[,] pole, out int indexRadkuMinima, out int indexSloupceMinima)
        {
            // Lokální proměnné: 'i' - index řádku; 'j' - index sloupce; 'minimum' - hodnota minima
            int minimum;
            // Přiřazení maximální možné hodnoty datového typu int
            minimum = int.MaxValue;
            // Přiřazení hodnoty 0 do indexu řádku a sloupce minima - nutná inicializace
            indexRadkuMinima = indexSloupceMinima = -1;
            // Procházení řádků matice
            for (int i = 0; i < m; i++)
            {
                // Procházení sloupců matice
                for (int j = 0; j < n; j++)
                {
                    // Pokud je nalezen prvek v matici, jehož hodnota je menší než minimum...
                    if (pole[i, j] < minimum)
                    {
                        // Uložení hodnoty nalezeného prvku do minima
                        minimum = pole[i, j];
                        // Přiřazení indexu řádku aktuálního prvku do indexu řádku minima
                        indexRadkuMinima = i;
                        // Přiřazení indexu sloupce aktuálního prvku do indexu sloupce minima
                        indexSloupceMinima = j;
                    }
                }
            }
            // Přiřazení hodnoty nalezeného minima do výstupu metody
            return minimum;
        }
 
        /// <summary>
        /// Metoda pro hledání největšího prvku v matici
        /// </summary>
        /// <param name="m"> počet řádků matice </param>
        /// <param name="n"> počet sloupců matice </param>
        /// <param name="pole"> matice </param>
        /// <param name="indRadkuMaxima"> index řádku maxima </param>
        /// <param name="indexSloupceMaxima"> index sloupce maxima </param>
        /// <returns> celočíselná hodnota maxima </returns>
        private int MaximumVPoli(int m, int n, int[,] pole, out int indRadkuMaxima, out int indexSloupceMaxima)
        {
            // Lokální proměnné: 'i' - index řádku; 'j' - index sloupce; 'maximum' - hodnota maxima
            int maximum;
            // Přiřazení nejmenší možné hodnoty datového typu int
            maximum = (-int.MaxValue - 1);
            // Přiřazení hodnoty 0 do indexu řádku a sloupce maxima - nutná inicializace
            indRadkuMaxima = indexSloupceMaxima = -1;
            // Procházení řádků matice
            for (int i = 0; i < m; i++)
            {
                // Procházení sloupců matice
                for (int j = 0; j < n; j++)
                {
                    // Pokud je nalezen prvek v matici, jehož hodnota je větší než maximum...
                    if (pole[i, j] > maximum)
                    {
                        // Uložení hodnoty nalezeného prvku do minima
                        maximum = pole[i, j];
                        // Přiřazení indexu řádku aktuálního prvku do indexu řádku maxima
                        indRadkuMaxima = i;
                        // Přiřazení indexu sloupce aktuálního prvku do indexu sloupce maxima
                        indexSloupceMaxima = j;
                    }
                }
            }
            // Přiřazení hodnoty nalezeného maxima do výstupu metody
            return maximum;
        }
 
        /// <summary>
        /// Metoda pro výpočet aritmetického průměru prvků v matici
        /// </summary>
        /// <param name="m"> počet řádků matice </param>
        /// <param name="n"> počet sloupců matice </param>
        /// <param name="pole"> matice </param>
        /// <returns> hodnota aritmetického průměru (reálné číslo) </returns>
        private double PrumerPole(int m, int n, int[,] pole)
        {
            /* Lokální proměnné: 'i' ... index řádku matice; 'j'... index sloupce matice;
             * 'suma' - suma prvků matice */ 
            int suma;
            // Nastavení počáteční hodnoty u sumy
            suma = 0;
            // Procházení řádků matice
            for (int i = 0; i < m; i++)
            {
                // Procházení sloupců matice
                for (int j = 0; j < n; j++)
                {
                    // Přičtení dalšího prvku matice do sumy
                    suma += pole[i, j];
                }
            }
            /* Výpočet průměru (suma/počet prvků) a přiřazení hodnoty do výstupu metody
             * nutné přetypovat sumu na double, aby nedošlo k celočíselnému dělení */
            return (double)suma / (m * n);
        }
 
        /// <summary>
        /// Metoda pro vzestupné třídění prvků v matici
        /// </summary>
        /// <param name="m"> počet řádků matice </param>
        /// <param name="n"> počet sloupců matice </param>
        /// <param name="pole"> matice </param>
        private void SeraditPole(int m, int n, int[,] pole)
        {
            /* Lokální proměnné: '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 hodnota sousedícího prvku je 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>
        /// Metoda pro transpozici 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 </param>
        private 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í
                MessageBox.Show("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>
        /// Metoda pro transpozici 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 </param>
        private 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á) ...
            if (m != n)
            {
                // Výpis varovného upozornění
                MessageBox.Show("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
 
        #endregion Pomocné metody       
 
 
        #region Události
 
        #region Nastavení atributů pole
 
        /// <summary>
        /// Validace počtu řádků matice
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TxtPocetRadku_LostFocus(object sender, RoutedEventArgs e)
        {
            // Lokální proměnná: 'novaHodnota' - nový počet řádků matice
            int novaHodnota;
            /* Přiřazení počtu řádků z objektu na formuláři do lokální proměnné
             * určující počet řádků matice */
            int.TryParse(this.TxtPocetRadku.Text, out novaHodnota);
            /* Pokud počet řádků je větší než maximální počet řádků matice, nebo počet
             * řádků matice je menší než 1, pak... */
            if ((novaHodnota > Max) || (novaHodnota < 1))
            {
                // Zobrazení dialogového okna s textem a hodnotou max. počtu řádků matice
                MessageBox.Show(String.Format("Chyba rozměru matice, nastavení na max. počet řádků: {0}", Max));
                /* Přiřazení maximálního rozměru matice do lokální proměnné určující
                 * počet řádků matice */
                novaHodnota = Max;
                // Přiřazení maximálního počtu řádků matice do objektu na formuláři
                this.TxtPocetRadku.Text = Max.ToString();
            }
 
            // Pokud nový počet řádků matice není stejný jako stávající počet řádků matice, pak...
            if (novaHodnota != this.pocetRadku)
            {
                // Uložení nového počtu řádků matice do datové složky třídy
                this.pocetRadku = novaHodnota;
                // Vytvoření nové instance matice s novým počtem řádků
                this.pole = new int[this.pocetRadku, this.pocetSloupcu];
                // Zavolání metody pro zobrazení matice do objektu TextBox na formuláři
                this.ZobrazitPoleJakoText(this.pocetRadku, this.pocetSloupcu, this.pole);
                // Zavolání metody pro zobrazení matice do objektu ListView na formuláři
                this.ZobrazitPoleVListView(this.pocetRadku, this.pocetSloupcu, this.pole);
            }
        }
 
        /// <summary>
        /// Validace počtu sloupců matice
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TxtPocetSloupcu_LostFocus(object sender, RoutedEventArgs e)
        {
            // Lokální proměnná: 'novaHodnota' - nový počet sloupců matice
            int novaHodnota;
            /* Přiřazení počtu sloupců z objektu na formuláři do lokální proměnné
             * určující počet sloupců matice */
            int.TryParse(this.TxtPocetSloupcu.Text, out novaHodnota);
            /* Pokud počet sloupců je větší než maximální počet sloupců matice, nebo počet
             * řádků sloupců je menší než 1, pak... */
            if ((novaHodnota > Max) || (novaHodnota < 1))
            {
                // Zobrazení dialogového okna s textem a hodnotou max. počtu sloupců matice
                MessageBox.Show(String.Format("Chyba rozměru matice, nastavení na max. počet sloupců: {0}", Max));
                /* Přiřazení maximálního rozměru matice do lokální proměnné určující
                 * počet sloupců matice */
                novaHodnota = Max;
                // Přiřazení maximálního počtu sloupců matice do objektu na formuláři
                this.TxtPocetSloupcu.Text = Max.ToString();
            }
 
            // Pokud nový počet sloupců matice není stejný jako stávající počet sloupců matice, pak...
            if (novaHodnota != this.pocetSloupcu)
            {
                // Uložení nového počtu sloupců matice do datové složky třídy
                this.pocetSloupcu = novaHodnota;
                // Vytvoření nové instance matice s novým počtem sloupců
                this.pole = new int[this.pocetRadku, this.pocetSloupcu];
                // Zavolání metody pro zobrazení matice do objektu TextBox na formuláři
                this.ZobrazitPoleJakoText(this.pocetRadku, this.pocetSloupcu, this.pole);
                // Zavolání metody pro zobrazení matice do objektu ListView na formuláři
                this.ZobrazitPoleVListView(this.pocetRadku, this.pocetSloupcu, this.pole);
            }
        }
 
        /// <summary>
        /// Validace dolní meze intervalu přípustných hodnot prvků matice 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TxtMinHodnota_LostFocus(object sender, RoutedEventArgs e)
        {
            /* Přiřazení dolní meze z objektu na formuláři do datové složky třídy určující 
             * dolní mez intervalu přípustných hodnot */
            int.TryParse(this.TxtMinHodnota.Text, out this.minHodnota);
            // Pokud nová dolní mez je větší než stávající horní mez, pak...
            if (this.minHodnota > this.maxHodnota)
            {
                // Zobrazení dialogového okna s chybou a nastavení dolní meze na horní mez
                MessageBox.Show(String.Format("Chyba hodnoty dolní meze - dolní mez nastavena na horní mez: {0}", 
                    this.maxHodnota));
                // Dolní mez je nastavena na hodnotu horní meze
                this.minHodnota = this.maxHodnota;
                // Zobrazení hodnoty dolní meze na formuláři 
                this.TxtMinHodnota.Text = minHodnota.ToString();
            }
        }
 
        /// <summary>
        /// Validace horní meze intervalu přípustných hodnot prvků matice 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TxtMaxHodnota_LostFocus(object sender, RoutedEventArgs e)
        {
            /* Přiřazení horní meze z objektu na formuláři do datové složky třídy určující 
             * horní mez intervalu hodnot, kterých mohou nabývat prvky v matici */
            int.TryParse(this.TxtMaxHodnota.Text, out this.maxHodnota);
            // Pokud nová horní mez je menší než stávající dolní mez, pak...
            if (this.maxHodnota < this.minHodnota)
            {
                // Zobrazení dialogového okna s chybou a nastavení horní meze na dolní mez
                MessageBox.Show(String.Format("Chyba hodnoty horní meze - horní mez nastavena na dolní mez: {0}", 
                    this.minHodnota));
                // Horní mez je nastavena na hodnotu dolní meze
                this.maxHodnota = this.minHodnota;
                // Zobrazení hodnoty horní meze na formuláři
                this.TxtMaxHodnota.Text = maxHodnota.ToString();
            }
        }
 
        /// <summary>
        /// Validace indexu řádku prvku matice při ručním plnění
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TxtPrvekIndexRadku_LostFocus(object sender, RoutedEventArgs e)
        {
            // Lokální proměnná: 'index' - index řádku prvku matice
            int index;
            // Uložení indexu řádku prvku do lokální proměnné (konverze textu na celé číslo)
            int.TryParse(this.TxtPrvekIndexRadku.Text, out index);
            /* Pokud index řádku prvku je větší než počet řádků matice - 1, nebo index řádku prvku je
             * menší než 0, pak... */
            if ((index > this.pocetRadku - 1) || (index < 0))
            {
                // Zobrazení dialogového okna s chybou a nastavení indexu na počet řádků matice - 1
                MessageBox.Show(String.Format("Chybný index řádku prvku. Index nastaven na horní mez: {0}", 
                    this.pocetRadku - 1));
                // Přiřazení horní meze indexu do objektu na formuláři určujícího index řádku prvku matice
                this.TxtPrvekIndexRadku.Text = String.Format("{0}", this.pocetRadku - 1);
            }
        }
 
        /// <summary>
        /// Validace indexu sloupce prvku matice při ručním plnění
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TxtPrvekIndexSloupce_LostFocus(object sender, RoutedEventArgs e)
        {
            // Lokální proměnná: 'index' - index sloupce prvku matice
            int index;
            // Uložení indexu sloupce prvku do lokální proměnné (konverze textu na celé číslo)
            int.TryParse(this.TxtPrvekIndexSloupce.Text, out index);
            /* Pokud index sloupce prvku je větší než počet sloupců matice - 1, nebo index sloupce prvku je
             * menší než 0, pak... */
            if ((index > this.pocetSloupcu - 1) || (index < 0))
            {
                // Zobrazení dialogového okna s chybou a nastavení indexu na počet sloupců matice - 1
                MessageBox.Show(String.Format("Chybný index sloupce prvku. Index nastaven na horní mez: {0}",
                    this.pocetSloupcu - 1));
                // Přiřazení horní meze indexu do objektu na formuláři určujícího index sloupce prvku matice
                this.TxtPrvekIndexSloupce.Text = String.Format("{0}", this.pocetSloupcu - 1);
            }
        }
 
        /// <summary>
        /// Validace hodnoty prvku matice při ručním plnění
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TxtHodnota_LostFocus(object sender, RoutedEventArgs e)
        {
            // Lokální proměnná: 't' - hodnota prvku
            int t;
            // Uložení hodnoty prvku do lokální proměnné (konverze textu na celé číslo)
            int.TryParse(this.TxtHodnota.Text, out t);
            /* Pokud hodnota prvku je větší než horní mez, nebo hodnota prvku je
             * menší než dolní mez intervalu hodnot v matici, pak... */
            if ((t > this.maxHodnota) || (t < this.minHodnota))
            {
                // Zobrazení dialogového okna s textem chyby a hodnotami mezí
                MessageBox.Show(String.Format("Hodnota prvku není v intervalu: {0} až {1}",
                    this.minHodnota, this.maxHodnota));
                // Vymázání obsahu objektu na formuláři s hodnotou prvku 
                this.TxtHodnota.Clear();
            }
        }
 
 
        #endregion Nastavení atributů pole
 
        #region Plnění pole
 
        /// <summary>
        /// Volání metody pro plnění matice náhodnými čísly
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnNahodne_Click(object sender, RoutedEventArgs e)
        {
            // Zavolání metody bez návratu pro plnění matice náhodnými čísly
            this.NahodnePole(this.pocetRadku, this.pocetSloupcu, this.minHodnota, this.maxHodnota, this.pole);
        }
 
        /// <summary>
        /// Metoda pro ruční plnění jednotlivých prvků matice
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnJednotlive_Click(object sender, RoutedEventArgs e)
        {
            /* Přiřazení indexu řádku prvku z objektu na formuláři (konverze textu na celé 
             * číslo) do lokální proměnné */
            int.TryParse(this.TxtPrvekIndexRadku.Text, out int indexRadku);
 
            /* Přiřazení indexu sloupce prvku z objektu na formuláři (konverze textu na celé 
             * číslo) do lokální proměnné */
            int.TryParse(this.TxtPrvekIndexSloupce.Text, out int indexSloupce);
 
            // Přiřazení hodnoty prvku z objektu na formuláři do lokální proměnné
            int.TryParse(this.TxtHodnota.Text, out int hodnota);
 
            /* Přiřazení dolní meze intervalu hodnoty prvku z objektu na formuláři
             * do lokální proměnné */
            int.TryParse(this.TxtMinHodnota.Text, out int minh);
 
            /* Přiřazení horní meze intervalu hodnoty prvku z objektu na formuláři
             * do lokální proměnné */
            int.TryParse(this.TxtMaxHodnota.Text, out int maxh);
 
            /* Pokud index řádku prvku je mimo interval hodnot, tj. je menší než 0, 
             * nebo je větší než počet řádků - 1, pak... */
            if ((indexRadku < 0) || (indexRadku > this.pocetRadku - 1))
            {
                // Zobrazení varovného dialogového okna
                MessageBox.Show("Zadaná hodnota indexu řádku prvku je mimo meze", "Chyba v zadání",
                    MessageBoxButton.OK, MessageBoxImage.Error);
            }
            /* Pokud index sloupce prvku je mimo interval hodnot, tj. je menší než 0, 
             * nebo je větší než počet sloupců - 1, pak... */
            else if ((indexSloupce < 0) || (indexSloupce > this.pocetSloupcu - 1))
            {
                // Zobrazení varovného dialogového okna
                MessageBox.Show("Zadaná hodnota indexu sloupce prvku je mimo meze", "Chyba v zadání",
                    MessageBoxButton.OK, MessageBoxImage.Error);
            }
            /* Pokud hodnota prvku je větší, než horní mez intervalu povolené hodnoty prvku, nebo
             * je menší než dolní mez intervalu hodnot prvku, pak... */
            else if ((hodnota > maxh) || (hodnota < minh))
            {
                // Zobrazení varovného dialogového okna
                MessageBox.Show("Zadaná hodnota prvku je mimo meze", "Chyba v zadání",
                    MessageBoxButton.OK, MessageBoxImage.Error);
            }
            // Jinak...
            else
            {
                // Přiřazení hodnoty z lokální proměnné do prvku matice na pozici [indexRadku, indexSloupce]
                this.pole[indexRadku, indexSloupce] = hodnota;
                // Zavolání metody pro zobrazení matice v objektu (typu TextBox) na formuláři
                this.ZobrazitPoleJakoText(this.pocetRadku, pocetSloupcu, this.pole);
                // Zavolání metody pro zobrazení matice v objektu (typu ListView) na formuláři
                this.ZobrazitPoleVListView(this.pocetRadku, this.pocetSloupcu, this.pole);
 
                // Pokud index sloupce prvku je menší než celkový počet sloupců matice - 1, pak...
                if (indexSloupce < this.pocetSloupcu - 1)
                {
                    // Zvýšení indexu sloupce prvku o 1
                    indexSloupce++;
                    // Přiřazení indexu sloupce prvku do objektu na formuláři
                    this.TxtPrvekIndexSloupce.Text = indexSloupce.ToString();
                }
                // Pokud index řádku prvku je menší než celkový počet řádků matice - 1, pak...
                else if (indexRadku < this.pocetRadku - 1) 
                {
                    // Zvýšení indexu řádku prvku o 1
                    indexRadku++;
                    // Přiřazení indexu řádku prvku do objektu na formuláři
                    this.TxtPrvekIndexRadku.Text = indexRadku.ToString();
                    // Přiřazení 0 do indexu sloupce
                    indexSloupce = 0;
                    // Přiřazení indexu sloupce prvku do objektu na formuláři
                    this.TxtPrvekIndexSloupce.Text = indexSloupce.ToString();
                }
            }
        }
 
        /// <summary>
        /// Metoda pro zavolání metody pro nulování matice
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnNulovat_Click(object sender, RoutedEventArgs e)
        {
            //Zavolání metody pro nulování matice
            this.NulovatPole(this.pocetRadku, this.pocetSloupcu, this.pole);
        }
 
        #endregion Plnění pole
 
        #region Zobrazení pole
 
        /// <summary>
        /// Volání metody pro zobrazení matice jako text v objektu typu TextBox na formuláři
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnJakoText_Click(object sender, RoutedEventArgs e)
        {
            // Zavolání metody pro zobrazení matice jako text v objektu na formuláři
            this.ZobrazitPoleJakoText(this.pocetRadku, this.pocetSloupcu, this.pole);
        }
 
        /// <summary>
        /// Volání metody pro zobrazení prvků matice v objektu typu ListView na formuláři
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnDoMrizky_Click(object sender, RoutedEventArgs e)
        {
            // Zavolání metody pro zobrazení prvků matice do mřížky na formuláři
            this.ZobrazitPoleVListView(this.pocetRadku, this.pocetSloupcu, this.pole);
        }
 
        #endregion Zobrazení pole
 
        #region Operace s polem
 
        /// <summary>
        /// Volání metody pro určení minima a jeho pozice v matici
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnMinimum_Click(object sender, RoutedEventArgs e)
        {
            /* Lokální proměnné: 'minimum' - hodnota minima v matici; 'indexRadkuMinima' - 
             * index řádku minima; 'indexSloupceMinima' - index sloupce minima */
            int minimum;
            /* Přiřazení výstupu metody pro určení minima do lokální proměnné a výstupní parametry 
             * určující index řádku ('indexRadkuMinima') a sloupce ('indexSloupceMinima') minima */
            minimum = this.MinimumVPoli(this.pocetRadku, this.pocetSloupcu, this.pole, 
                out int indexRadkuMinima, out int indexSloupceMinima);
            /* Zobrazení textu spolu s hodnotou minima a indexu řádku a sloupce minima 
             * do objektu (TextBox) na formuláři */
            this.TxtVysledek.Text = string.Format("Minimum = {0} (na pozici [{1}, {2}])", 
                minimum, indexRadkuMinima, indexSloupceMinima);
        }
 
        /// <summary>
        /// Volání metody pro určení maxima a jeho pozice v matici
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnMaximum_Click(object sender, RoutedEventArgs e)
        {
            /* Lokální proměnné: 'maximum' - hodnota maxima v matici; 'indexRadkuMaxima' - 
                * index řádku maxima; 'indexSloupceMaxima' - index sloupce maxima */
            int maximum;
            /* Přiřazení výstupu metody pro určení maxima do lokální proměnné a výstupní parametry 
                * určující index řádku ('indexRadkuMaxima') a sloupce ('indexSloupceMaxima') maxima */
            maximum = this.MaximumVPoli(this.pocetRadku, this.pocetSloupcu, this.pole,
                out int indexRadkuMaxima, out int indexSloupceMaxima);
            /* Zobrazení textu spolu s hodnotou maxima a indexu řádku a sloupce maxima 
                * do objektu (TextBox) na formuláři */
            this.TxtVysledek.Text = string.Format("Maximum = {0} (na pozici [{1}, {2}])",
                maximum, indexRadkuMaxima, indexSloupceMaxima);
        }
 
        /// <summary>
        /// Volání metody pro výpočet aritmetického průměru z prvků matice
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnPrumer_Click(object sender, RoutedEventArgs e)
        {
            // Lokální proměnná: 'prumer' - průměr prvků v matici
            double prumer;
            // Přiřazení výstupu metody pro výpočet průměru z prvků pole do lokální proměnné
            prumer = this.PrumerPole(this.pocetRadku, this.pocetSloupcu, this.pole);
            /* Zobrazení textu 'Průměr = ' spolu s vypočteným průměrem (konverze reálného čísla 
             * na text, zobrazného na 2 desetinná místa) do objektu (TextBox) na formuláři */
            this.TxtVysledek.Text = string.Format("Průměr = {0:N2}", prumer);
        }
 
        /// <summary>
        /// Volání metody pro vzestupné třídění prvků v řádcích matice
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnSeradit_Click(object sender, RoutedEventArgs e)
        {
            // Zavolání metody pro vzestupné třídění prvků v matici
            this.SeraditPole(this.pocetRadku, this.pocetSloupcu, this.pole);
            // Zavolání metody pro zobrazení matice do objektu (TextBox) na formuláři
            this.ZobrazitPoleJakoText(this.pocetRadku, this.pocetSloupcu, this.pole);
            // Zavolání metody pro zobrazení matice v objektu (ListView) na formuláři
            this.ZobrazitPoleVListView(this.pocetRadku, this.pocetSloupcu, this.pole);
        }
 
        /// <summary>
        /// Volání metody pro transpozici prvků matice podle hlavní diagonály
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnTranspoziceHlavni_Click(object sender, RoutedEventArgs e)
        {            
            // Zavolání metody pro transpozici prvků matice podle hlavní diagonály
            this.HlavniTranspozice(this.pocetRadku, this.pocetSloupcu, this.pole);
            // Zavolání metody pro zobrazení matice do objektu (TextBox) na formuláři
            this.ZobrazitPoleJakoText(this.pocetRadku, this.pocetSloupcu, this.pole);
            // Zavolání metody pro zobrazení matice v objektu (ListView) na formuláři
            this.ZobrazitPoleVListView(this.pocetRadku, this.pocetSloupcu, this.pole);
        }
 
        /// <summary>
        /// Volání metody pro transpozici prvků matice podle vedlejší diagonály
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnTranspoziceVedlejsi_Click(object sender, RoutedEventArgs e)
        {
            // Zavolání metody pro transpozici prvků matice podle vedlejsi diagonály
            this.VedlejsiTranspozice(this.pocetRadku, this.pocetSloupcu, this.pole);
            // Zavolání metody pro zobrazení matice do objektu (TextBox) na formuláři
            this.ZobrazitPoleJakoText(this.pocetRadku, this.pocetSloupcu, this.pole);
            // Zavolání metody pro zobrazení matice v objektu (ListView) na formuláři
            this.ZobrazitPoleVListView(this.pocetRadku, this.pocetSloupcu, this.pole);
        }
 
        #endregion Operace s polem
 
        /// <summary>
        /// Metoda pro zavření formuláře
        /// </summary>
        private void BtnKonec_Click(object sender, RoutedEventArgs e)
        {
            // Zavření formuláře
            this.Close();
        }
 
        #endregion Události
 
 
 
    }
}

Kód 2: Výsledný C# kód vytvořeného formuláře a metod jeho prvků