NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s podporou uplatnění od 0 Kč. Více informací.
Avatar
Karel Ohář
Člen
Avatar
Karel Ohář:27.8.2016 18:44

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.8.2016 18:44
Avatar
Odpovídá na Karel Ohář
Neaktivní uživatel:27.8.2016 18:50
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.8.2016 18:52
Nahoru Odpovědět
27.8.2016 18:50
Neaktivní uživatelský účet
Avatar
Pjanus
Člen
Avatar
Odpovídá na Karel Ohář
Pjanus:27.8.2016 18:51

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.8.2016 18:51
Avatar
Marian Benčat:27.8.2016 18:51

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í
+2,50 Kč
Řešení problému
Nahoru Odpovědět
27.8.2016 18:51
Totalitní admini..
Avatar
Odpovídá na Neaktivní uživatel
Marian Benčat:27.8.2016 18:53

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.8.2016 18:53
Nahoru Odpovědět
27.8.2016 18:53
Totalitní admini..
Avatar
Karel Ohář
Člen
Avatar
Karel Ohář:27.8.2016 18:59

Moc vám děkuji :-)

 
Nahoru Odpovědět
27.8.2016 18:59
Avatar
Odpovídá na Marian Benčat
Neaktivní uživatel:27.8.2016 19:00

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
27.8.2016 19:00
Neaktivní uživatelský účet
Avatar
Karel Ohář
Člen
Avatar
Karel Ohář:27.8.2016 19:09

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

Editováno 27.8.2016 19:09
 
Nahoru Odpovědět
27.8.2016 19:09
Avatar
Odpovídá na Karel Ohář
Neaktivní uživatel:27.8.2016 20:00

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

Nahoru Odpovědět
27.8.2016 20:00
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Michal Žůrek - misaz:27.8.2016 20:20

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
27.8.2016 20:20
Avatar
Odpovídá na Michal Žůrek - misaz
Neaktivní uživatel:27.8.2016 21:14

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
27.8.2016 21:14
Neaktivní uživatelský účet
Avatar
krepsy3
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
krepsy3:27.8.2016 21:35

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.8.2016 21:35
Programátor je stroj k převodu kávy na kód.
Avatar
Pjanus
Člen
Avatar
Odpovídá na Neaktivní uživatel
Pjanus:27.8.2016 22:05

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.8.2016 22:05
 
Nahoru Odpovědět
27.8.2016 22:05
Avatar
Neaktivní uživatel:28.8.2016 11:25

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

Nahoru Odpovědět
28.8.2016 11:25
Neaktivní uživatelský účet
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.