Faktoriál
Požadavky na absolvování
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