Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
matesax
Tvůrce
Avatar
matesax:22.4.2012 11:16

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
Tvůrce
Avatar
Odpovídá na matesax
Kit:22.4.2012 11:26

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
Tvůrce
Avatar
matesax:22.4.2012 11:40

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 Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger:22.4.2012 12:14

Nejprve by to chtělo přečíst si toto: http://www.itnetwork.cz/index.php?…

Nahoru Odpovědět
22.4.2012 12:14
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:22.4.2012 12:16

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
22.4.2012 12:16
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Hartinger
matesax:22.4.2012 12:17

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 Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger:22.4.2012 12:19

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
You are the greatest project you will ever work on.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Hartinger
matesax:22.4.2012 12:23

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 Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger:22.4.2012 12:25

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
You are the greatest project you will ever work on.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Hartinger
matesax:22.4.2012 12:32

Jede to - děkuji. :)

 
Nahoru Odpovědět
22.4.2012 12:32
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger:22.4.2012 12:34

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
You are the greatest project you will ever work on.
Avatar
matesax
Tvůrce
Avatar
matesax:27.4.2012 6:06

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 Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger:27.4.2012 10:03

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
You are the greatest project you will ever work on.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Hartinger
matesax:27.4.2012 18:14

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

 
Nahoru Odpovědět
27.4.2012 18:14
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger:27.4.2012 19:04

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
You are the greatest project you will ever work on.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Hartinger
matesax:27.4.2012 19:05

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

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

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
Luboš Běhounek Satik:1.6.2013 13:39

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
https://www.facebook.com/peasantsandcastles/
Avatar
matesax
Tvůrce
Avatar
Odpovídá na
matesax:1.6.2013 13:45

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:1.6.2013 15:06

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.