using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Faktorial { public partial class Form1 : Form { double F = 0; int N = 0; string strInt, strDouble; public static double Fakt(int cislo) { // Pokud je n již 1 nebo 0, vrátí se přímo výsledek 1, // jinak se vypočítá n * faktorial čísla o 1 menšího: if (cislo <= 1) return 1; else return cislo * Fakt(cislo - 1); } public Form1() { InitializeComponent(); } private void textBox_cislo_KeyPress(object sender, KeyPressEventArgs e) { if (!((e.KeyChar >= 48 && e.KeyChar <= 57) || (e.KeyChar == 8))) { e.KeyChar = Convert.ToChar(0); } } private void Form1_Load(object sender, EventArgs e) { textBox_cislo.Text = ""; listBox_vypocet.Items.Clear(); textBox_cislo.Focus(); strInt = " int: " + int.MinValue + " až " + int.MaxValue; strDouble = " double: " + double.MinValue + " až " + double.MaxValue; listBox_rozsah.Items.Add(""); listBox_rozsah.Items.Add(strInt); listBox_rozsah.Items.Add(""); listBox_rozsah.Items.Add(strDouble); } private void button_vypocet_Click(object sender, EventArgs e) { listBox_vypocet.Items.Clear(); if (textBox_cislo.Text == "") { MessageBox.Show("Musíte zadat číslo!", "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } else { try { N = Convert.ToInt32(textBox_cislo.Text); } catch (OverflowException) { MessageBox.Show("Zadané číslo je příliš velké pro typ Integer!", "Varování", MessageBoxButtons.OK, MessageBoxIcon.Warning); textBox_cislo.Text = ""; textBox_cislo.Focus(); return; } if (N > 9000) { MessageBox.Show("Zadané číslo je příliš velké pro naší rekurzi! ", "Varování", MessageBoxButtons.OK, MessageBoxIcon.Warning); textBox_cislo.Text = ""; textBox_cislo.Focus(); return; } else { F = Fakt(N); listBox_vypocet.Items.Add(""); listBox_vypocet.Items.Add(" " + textBox_cislo.Text + " ! = " + Convert.ToString(F)); listBox_vypocet.Items.Add(""); if (N > 170) { listBox_vypocet.Items.Add(" Výsledek je větší číslo než maximální hodnota typu Double!"); } } } } private void textBox_cislo_TextChanged(object sender, EventArgs e) { listBox_vypocet.Items.Clear(); } } }