Diskuze: Náhodné číslo

C# .NET .NET (C# a Visual Basic) Náhodné číslo American English version English version

Avatar
Karel Ohář
Člen
Avatar
Karel Ohář:

Zdravím, jak můžu vygenerovat náhodné násobky určeného čísla, třeba kdybych chtěl aby mi to vypsalo náhodné číslo od 1 do 1000 ale jen násobky číslo 13 ?

 
Odpovědět 27. srpna 18:44
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Karel Ohář
Jiří Gracík:
randInt() % (1000 / 13) * 13

EDIT: To nahoře je interval <0;1000), níže je (0;1000)

(randInt() + 1) % (1000 / 13) * 13
Editováno 27. srpna 18:52
Nahoru Odpovědět 27. srpna 18:50
Creating websites is awesome till you see the result in another browser ...
Avatar
Pjanus
Člen
Avatar
Odpovídá na Karel Ohář
Pjanus:

Vypočítej největší násobek čísla který je menší než horní hranice, to číslo vyděl 13 a pak použij získané číslo jako horní limit pro náhodnou generaci. Nakonec vždycky číslo které dostaneš z generátoru vynásob 13.

 
Nahoru Odpovědět 27. srpna 18:51
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:

Musíš zachovat "rovnoměrné rozdělení", tedy ty nemůžeš například při výběru nenásobku losovat znovu.. tím bys to ovlivnil.. Číslo, co ty potřebuješ je x*13, a má to být náhodné, tedy ty potřebuješ 1000 / 13 = 76 různých možností.... tedy děláš defakto výběr náhodného číslo od 1 do 76ti. a pak to číslo vynásobíš 13ti.. získáš rozsah 13 - 988, ale jen násobky 13ti.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 27. srpna 18:51
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Jiří Gracík
Marian Benčat:

todle právě nemůže ;-) protože v Maxintu nemusí být všechny "modula 76ti " zastoupeny stejným počtem. Nebude to rovnoměrné rozdělení.

Editováno 27. srpna 18:53
 
Nahoru Odpovědět 27. srpna 18:53
Avatar
Karel Ohář
Člen
Avatar
Karel Ohář:

Moc vám děkuji :-)

 
Nahoru Odpovědět 27. srpna 18:59
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Marian Benčat
Jiří Gracík:

To je pravda. Otázka je, jestli ho trápí, že část rozsahu je tam může být zastoupena 330382099x a druhá 330382100x (za předpokladu, že moje randInt funkce vrací uint)

Nahoru Odpovědět  +2 27. srpna 19:00
Creating websites is awesome till you see the result in another browser ...
Avatar
Karel Ohář
Člen
Avatar
Karel Ohář:

Promiňte ale vůbec nechápu jak funguje ta vaše funkce randInt() ...

Editováno 27. srpna 19:09
 
Nahoru Odpovědět 27. srpna 19:09
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Karel Ohář
Jiří Gracík:

To je nějaká funkce, co vrací náhodné celé kladné číslo.

Nahoru Odpovědět  +1 27. srpna 20:00
Creating websites is awesome till you see the result in another browser ...
Avatar
Odpovídá na Jiří Gracík
Michal Žůrek (misaz):

No mě by to tedy takový brutální rozdíl celkem trápil... Kvůli toho se tvoje řešení stává takřka nepoužitelným.

Nahoru Odpovědět  ±0 27. srpna 20:20
Nesnáším {}, proto se jim vyhýbám.
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Jiří Gracík:

Omlouvám se, jdu pověsit klávesnici na hřebík a ode dneška se budu věnovat pouze botanice.

Nahoru Odpovědět  +2 27. srpna 21:14
Creating websites is awesome till you see the result in another browser ...
Avatar
krepsy3
Redaktor
Avatar
Odpovídá na Jiří Gracík
krepsy3:

Tak mimochodem, funkce randInt() nemá přetížení pro horní mez? Jen se ptám, dělám v C# ale vzhledem k tomu, že se jedná o .NET, mělo by to tam být. Zadání jasně znělo od 0 do 1000. Tedy

var nahodne = randInt(1000);
nahodne = ((nahodne / 13) - (nahodne % 13)) * 13;
Nahoru Odpovědět 27. srpna 21:35
Programátor je stroj k převodu kávy na kód.
Avatar
Pjanus
Člen
Avatar
Odpovídá na Jiří Gracík
Pjanus:

No hlavní problém bude to, že je to výrazně pomalejší metoda, i když je pravda že co se týče délky zápisu tak vyhrává.

Editováno 27. srpna 22:05
 
Nahoru Odpovědět 27. srpna 22:05
Avatar
Jiří Gracík
Redaktor
Avatar
Jiří Gracík:

Proboha nemlaťte mě :D randInt byla nějaká pseudofunkce, neříkám, že jí .NET má

Nahoru Odpovědět  +2 28. srpna 11:25
Creating websites is awesome till you see the result in another browser ...
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 15 zpráv z 15.