2. PrvocislaWPF

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="PrvocislaWPF.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:PrvocislaWPF"
        mc:Ignorable="d"
        Title="Výpis prvočísel" Height="450" Width="600" MinHeight="300" MinWidth="400">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
 
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="3*"/>
        </Grid.ColumnDefinitions>
 
        <Label Content="Výpis prvních n prvočísel" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="16" FontWeight="Bold" Grid.ColumnSpan="2"/>
        <Label Content="Zadejte n:" Grid.Row="1" HorizontalAlignment="Right" Margin="5"/>
        <TextBox Name="TxtN" Text="?" Grid.Row="1" Grid.Column="1" Margin="5" VerticalAlignment="Center"/>
        <TextBox Name="TxtPrvocisla" Grid.Row="2" Margin="5" TextWrapping="Wrap" Grid.ColumnSpan="2" FontSize="14" VerticalScrollBarVisibility="Auto" 
                 IsReadOnly="True" Background="AliceBlue"/>
 
        <Button Name="BtnVypis" Content="Vypiš prvočísla" Width="120" Grid.Row="3" Grid.ColumnSpan="2" Margin="10" Padding="5" HorizontalAlignment="Left" Click="BtnVypis_Click"/>
        <Button Name="BtnKonec" Content="Konec" Width="120" Grid.Row="3" Grid.Column="1" HorizontalAlignment="Right" Margin="10" Padding="5" Click="BtnKonec_Click"/>
    </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 PrvocislaWPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        #region Výpočty
 
        // Metoda s návratem - návrat, zda je předané číslo prvočíslo (true), nebo nikoliv (false)
        private bool Prvocislo(int n)
        {
            /* Deklarace (inicializace): 'b' ... informace, zda je testované (předané) číslo 
             * prvočíslem (true - je prvočíslem); 'i' ... dělitel (čítač) */
            bool b = true;
            int i = 2;
 
            // Cyklus - dokud platí, že testované číslo je prvočíslo a čítač je menší než testované číslo
            while (b == true && i < n)
            {
                // Pokud testované číslo je dělitelné beze zbytku
                if (n % i == 0)
                {
                    // Testované číslo není prvočíslo
                    b = false;
                }
 
                // Inkrementace
                i++;
            }
 
            // Výstupem metody je informace, která je uložena v logické proměnné
            return b;
        }
 
        #endregion
 
 
        #region Události
 
        private void BtnVypis_Click(object sender, RoutedEventArgs e)
        {
            /* Deklarace: 'pocetCisel' ... počet prvočísel, která mají být vypsána; 
             * 'n' ... počet nalezených prvočísel - inicializace; 'i' ... testované číslo 
             * na prvočíslo (čítač) - inicializace; 'vystup' ... textová proměnná, do které 
             * budeme ukládat výsledek - inicializace */
            int pocetCisel;
            int n = 0;
            int i = 2;
            string vystup = "";
 
            if (!((Int32.TryParse(this.TxtN.Text, out pocetCisel)) && (pocetCisel > 0)))
            {
                // Zobrazení varovného dialogového okna
                MessageBox.Show("Zadejte platnou kladnou celočíselnou hodnotu pro počet čísel.", "Varování", 
                    MessageBoxButton.OK, MessageBoxImage.Warning);
                return;
            }
 
            // Vypnutí funkčnosti kurzoru (nelze klikat)
            Mouse.OverrideCursor = Cursors.Wait;
 
            // Vymazání předchozí vypsané řady
            this.TxtPrvocisla.Text = "";
 
            // Cyklus - pokud platí, že je nalezeno méně než specifikovaný počet prvočísel
            while (n < pocetCisel)
            {
                // Pokud návrat zavolané funkce testu na prvočíslo u testovaného čísla je pravda
                if (Prvocislo(i))
                {
                    // Zvýšeni hodnoty poctu nalezených prvočísel o 1
                    n++;
 
                    // Připojení číslice (testovaného čísla konvertovaného na text) k předchozím
                    vystup += i.ToString();
 
                    // Pokud není vypsán požadovaný počet prvočísel
                    if (n < pocetCisel)
                    {
                        // Připoj za číslo čárku
                        vystup += ", ";
                    }
                }
 
                // Nové testované číslo, které je o 1 vyšší než předchozí
                i++;
            }
 
            // Výpis řady na formulář
            this.TxtPrvocisla.Text = vystup;
 
            // Zapnutí funkčnosti kurzoru
            Mouse.OverrideCursor = null;
        }
 
        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ýpis řady prvočísel oddělených čárkami o zadaném počtu čísel, která má tato řada obsahovat - viz Výstup programu - Kód 1 a 2. Výpis je spuštěn pomocí stisknutí tlačítka Vypiš prvočísla umístěného v levém dolním rohu formuláře. 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 řady prvočísel o specifikované délce