2. FaktorialWPF

2.5. Výsledný kód

XAML kód

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

<Window x:Class="FaktorialWPF.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:FaktorialWPF"
        mc:Ignorable="d"
        Title="Výpočet faktoriálu" Height="250" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <WrapPanel Margin="5,20,5,5" HorizontalAlignment="Center">
            <Label Content="Zadejte číslo:" Margin="5" />
            <TextBox Name="TxtCislo" Margin="5" TextWrapping="Wrap" Text="0" Width="120" HorizontalContentAlignment="Center" 
                     VerticalContentAlignment="Center"/>
        </WrapPanel>
        <WrapPanel Margin="5,20,5,5" Grid.Column="1" HorizontalAlignment="Center">
            <Label Content="Faktoriál:" Margin="5" />
            <TextBox Name="TxtFaktorial" Margin="5" TextWrapping="Wrap" Text="0" Width="200" IsReadOnly="True" 
                     Background="AliceBlue" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
        </WrapPanel>
        <StackPanel Grid.Row="1" Grid.ColumnSpan="2">
            <WrapPanel HorizontalAlignment="Center">
                <Button Name="BtnFor" Content="For" Margin="5" Width="110" Height="30" Click="BtnFor_Click"/>
                <Button Name="BtnWhile" Content="While" Margin="5" Width="110" Click="BtnWhile_Click"/>
                <Button Name="BtnDoWhile" Content="Do While" Margin="5" Width="110" Click="BtnDoWhile_Click"/>
                <Button Name="BtnRekurze" Content="Rekurze" Margin="5" Width="110" Click="BtnRekurze_Click"/>
                <Button Name="BtnMazat" Content="Mazat" Margin="5"  Width="110" Click="BtnMazat_Click"/>
            </WrapPanel>
            <WrapPanel HorizontalAlignment="Right">
                <Button Name="BtnKonec" Content="Konec" Margin="5" Width="80" 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 FaktorialWPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        #region Výpočty
 
        /// <summary>
        /// Metoda s celočíselným návratem pro výpočet faktoriálu pomocí rekurze
        /// </summary>
        /// <param name="n"> číslo pro výpočet faktoriálu </param>
        /// <returns> vypočtený faktoriál </returns>
        private long FaktorialRekurze(int n)
        {
            // Pokud je předaná hodnota v parametru rovna nule
            if (n == 0)
            {
                // Faktoriál je 1
                return 1;
            }
            else
            {
                // Rekurzivní volání metody(metoda volá sama sebe)
                return n * FaktorialRekurze(n - 1);
            }
        }
 
        #endregion
 
        #region Události
        private void BtnFor_Click(object sender, RoutedEventArgs e)
        {
            // Deklarace: 'f' ... hodnota faktoriálu - inicializace
            long f = 1;
 
            // Načtení čísla pro výpočet faktoriálu a jeho konverze na číslo
            int.TryParse(TxtCislo.Text, out int n);
 
            // Cyklus s krokem; deklarace: 'i' ... čítač (aktuální číslo v součinu)
            for (int i = 1; i <= n; i++)
            {
                // Výpočet faktoriálu
                f = f * i;
            }
 
            // Zformátovaný výpis vypočteného faktoriálu (konverze na text)
            this.TxtFaktorial.Text = f.ToString("N0");
        }
 
        private void BtnWhile_Click(object sender, RoutedEventArgs e)
        {
            /* Deklarace: 'i' ... čítač (aktuální číslo v součinu) - inicializace; 
             * 'f' ... hodnota faktoriálu - inicializace */
            int i = 1;
            long f = 1;
 
            // Načtení čísla pro výpočet faktoriálu a jeho konverze na číslo
            int.TryParse(TxtCislo.Text, out int n);
 
            // Opakuj, pokud je čítač menší, nebo roven číslu pro výpočet faktoriálu
            while (i <= n)
            {
                // Výpočet faktoriálu
                f = f * i;
 
                // Inkrementace čítače
                i++;
            }
 
            // Zformátovaný výpis vypočteného faktoriálu (konverze na text)
            this.TxtFaktorial.Text = f.ToString("N0");
        }
 
        private void BtnDoWhile_Click(object sender, RoutedEventArgs e)
        {
            /* Deklarace: 'i' ... čítač (aktuální číslo v součinu) - inicializace; 
             * 'f' ... hodnota faktoriálu - inicializace */
            int i = 1;
            long f = 1;
 
            // Načtení čísla pro výpočet faktoriálu a jeho konverze na číslo
            int.TryParse(TxtCislo.Text, out int n);
 
            do
            {
                // Výpočet faktoriálu
                f = f * i;
 
                // Inkrementace čítače
                i++;
            }
            // Opakuj, dokud je čítač menší, nebo roven číslu pro výpočet faktoriálu
            while (i <= n);
 
            // Zformátovaný výpis vypočteného faktoriálu (konverze na text)
            this.TxtFaktorial.Text = f.ToString("N0");
        }
 
        private void BtnRekurze_Click(object sender, RoutedEventArgs e)
        {
            // Deklarace: 'f' ... hodnota faktoriálu
            long f;
 
            // Načtení čísla pro výpočet faktoriálu a jeho konverze na číslo
            int.TryParse(TxtCislo.Text, out int n);
 
            // Volání rekurzivní funkce - předání čísla pro výpočet faktoriálu
            f = FaktorialRekurze(n);
 
            // Zformátovaný výpis vypočteného faktoriálu (konverze na text)
            this.TxtFaktorial.Text = f.ToString("N0");
        }
 
        private void BtnMazat_Click(object sender, RoutedEventArgs e)
        {
            // Vymazání předchozího výpisu faktoriálu
            this.TxtFaktorial.Clear();
        }
 
        private void BtnKonec_Click(object sender, RoutedEventArgs e)
        {
            // Zavření formuláře
            this.Close();
        }
 
        #endregion
    }
}

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

Výstup programu

Na následujícím obrázku vidíme výstup naší aplikace pro výpočet faktoriálu ze zadaného čísla - viz Výstup programu - Kód 1 a 2. Výpočet faktoriálu s následným výpisem hodnoty faktoriálu je spouštěn pomocí příslušného tlačítka s určitým typem cyklu, nebo rekurze. Aplikaci lze ukončit pomocí tlačítka Konec, nebo pomocí zavíracího tlačítka umístěného v pravém rohu aplikace.

Výstup programu - Kód 1 a 2: Výpis hodnoty vypočteného faktoriálu pomocí cyklu s krokem