Diskuze: Faktoriál libovolného čísla

C# .NET .NET (C# a Visual Basic) Faktoriál libovolného čísla American English version English version

Avatar
matesax
Redaktor
Avatar
matesax:

Dobrý den,
našel jsem asi dva tucty možností, jak vypočítat faktoriál - prblém je, že se to vždy točí kolem cyklu - a do něj se mi nedaří vstoupit textem z textboxu. Navíc využívají vlastní metodu, takže nemohu omezit vypočítávání. Děkuji za pomoc.

 
Odpovědět 22.4.2012 11:16
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:

Místo cyklu použij rekurzi.

x!=x*(x-1)!
1!=1

Nahoru Odpovědět 22.4.2012 11:26
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
matesax:

Děkuji, jen s tím trochu zápolím:

private void button37_Click(object sender, EventArgs e)
       {
       x = (int) (float.Parse(textBox1.Text));
       c = x * (x - 1)!;
       textBox1.Text = c.ToString();
       }

Když k tomu c dám ! tak mi to podvlní úplně vše a ani na tom konci mi to nebere - tak mě oprav pls - děkuji. Tuším, že se bude jednat o úplnou blbost, ale hold se mám ještě co učit. :)

 
Nahoru Odpovědět 22.4.2012 11:40
Avatar
David Čápka
Tým ITnetwork
Avatar
Nahoru Odpovědět 22.4.2012 12:14
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:

Ten ! je matematický symbol pro faktoriál. Není součástí syntaxe C# v tomto významu. Napiš si to jako rekurzívní funkci nebo to klidně udělej cyklem. Myslím si, že C# cykly umí.

Aby bylo jasno: Napsal jsem ti matematický zápis pro výpočet faktoriálu. Ne zápis v C#.

Nahoru Odpovědět  +1 22.4.2012 12:16
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:

Pročteno - jak píšu, nedařilo se mi tam dostat text z textboxu - pokud jsem proměnnou definoval mimo kruh, tak ji to nevzalo - pokud v kruhu, tak nepodporovalo,...

 
Nahoru Odpovědět 22.4.2012 12:17
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:

Kruhu? Nepodporovalo? Nějak nechápu, ten algoritmus je tak jednoduchý a je k němu napsáno v článku tolik textu a kódu, že to až není hezké. Pokud umíš převést text na číslo, tak mě nenapadá, kde může být problém.

Nahoru Odpovědět 22.4.2012 12:19
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:

No v cyklu. Převedl jsem to do správného formátu a napsalo mi to:
...keyword must not be followed by an object expression.

 
Nahoru Odpovědět 22.4.2012 12:23
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:

Vezmu kód z článku a vložím tam místo meze hodnotu z TextBoxu, je to to, co chceš?

int result = 1;
int x = int.Parse(TextBox1.Text);
for (int i = 2; i <= x; i++) {
  result *= i;
}
// v result máš výsledek

Jinak už nevím :)

Nahoru Odpovědět 22.4.2012 12:25
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
matesax
Redaktor
Avatar
 
Nahoru Odpovědět 22.4.2012 12:32
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:

Samozřejmě, že to jede. Měl by sis ten článek pročíst znovu... Tohle jsou úplné základy, zkoušej si něco s cykly, například napsat do TextBoxu 5 hvězdiček s tím, že ve zdrojovém kódu může být hvězdička jen jedna, zkusit přepsat text mezi TextBoxy tak, aby byl pozpátku a podobně.

Nahoru Odpovědět 22.4.2012 12:34
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
matesax
Redaktor
Avatar
matesax:

Mě dělá problém jen to, jak to z vlastní metody dostat do podoby, kteru jsi mi zde uvedl. Například toto:

 public string GetRandomString (Random rnd, int length)
{
string charPool
= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw xyz1234567890";
StringBuilder rs = new StringBuilder();

while (length-- 0)
rs.Append(charPool[(int)(rnd.NextDouble() * charPool.Length)]);

return rs.ToString();
}

potřebuji použít v jiné metodě - tak jak na to? Děkuji.

 
Nahoru Odpovědět 27.4.2012 6:06
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:

Ty bys to měl v těch metodách naopak nechávat, aby byl kód strukturovaný a jeho části znovupoužitelné. Metodu si pak zavoláš tam, kde kód potřebuješ.

Nahoru Odpovědět 27.4.2012 10:03
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:

OK - ale jak zavolám zrovna tuto metodu? Jiné mně šly.

 
Nahoru Odpovědět 27.4.2012 18:14
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:

Metoda potřebuje pro svou funkčnost v parametru objekt generátoru náh. čísel, když jsi metodu evidentně nepsal a nevíš jak funguje, tak se nedivím, že ti nejde zavolat...

Zkus např.
Label1.Text = GetRandomString (new Random(), 10);

Jinak je ta metoda zbytečně složitá, kdyby ses nad tím raději zamyslel a zkusil to napsat sám, tak by to bylo efektivnější.

Nahoru Odpovědět 27.4.2012 19:04
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:

Omlouvám se - již jsem vše pochopil. :)

 
Nahoru Odpovědět 27.4.2012 19:05
Avatar
muff
Neregistrovaný
Avatar
muff:

ahoj :) mám takový malý dotaz :) mám za úkol vypočítat kombinační číslo faktoriál n a faktoriál k mám takhle double n = 0;
double result = 1;
Console.Write("Za­dejte číslo n : ");
n = Convert.ToDou­ble(Console.Re­adLine());
for (ulong i = 1; i <= n; i++) { result *= i; };
Console.Write(re­sult.ToString());

double k = 0;
double resul = 1;
Console.Write("Za­dej číslo k : ");
k = Convert.ToDou­ble(Console.Re­adLine());
for (ulong i = 1; i <= k; i++) { resul *= i; };
Console.Write(re­sul.ToString());

teď ale nevím, jak udělat (n-k)!. Může mi někdo poradit??

 
Nahoru Odpovědět 1.6.2013 13:30
Avatar
Odpovídá na muff
Luboš Běhounek (Satik):

vytahni si ten faktorial do funkce, pak ho jen budes volat s ruznyma parametrama, treba takhle nejak:

int n = 10;
int k = 3;

int x = faktorial(n);
int y = faktorial(n-k);
Nahoru Odpovědět 1.6.2013 13:39
:)
Avatar
matesax
Redaktor
Avatar
Odpovídá na muff
matesax:

Convert nepoužívej - to se tu již řešilo - prasárna!

int n, k, result = 1;

Console.WriteLine("Zadej n:");

n = int.Parse(Console.ReadLine());

Console.WriteLine("Zadej k:");

k = int.Parse(Console.ReadLine());

for(;n < (n - k);n--)
    result *= n;
Editováno 1.6.2013 13:47
 
Nahoru Odpovědět 1.6.2013 13:45
Avatar
muff
Neregistrovaný
Avatar
muff:

nevím jak pokračovat :( ale moc moc moc dík ;)

 
Nahoru Odpovědět 1.6.2013 15:06
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 20 zpráv z 20.