Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 22. 12. 2013 23:25

Dopikasan
Příspěvky: 308
Škola: TUL FM
Pozice: student
Reputace:   
 

delphi aplikace

Jak udělam aby se mi na label vygenerovalo náhodné číslo  ? Nebo na button? Nemužu na to přijít , díky


Jsou věci, které nikdy nepochopím.

Offline

 

#2 23. 12. 2013 01:09

Jan Jícha
Veterán
Místo: Plzeň/Mnichov
Příspěvky: 1801
Škola: ZČU - FST - KMM
Pozice: Safety Engineer
Reputace:   74 
Web
 

Re: delphi aplikace

Random(PocetCisel);

Offline

 

#3 23. 12. 2013 01:30

Dopikasan
Příspěvky: 308
Škola: TUL FM
Pozice: student
Reputace:   
 

Re: delphi aplikace

↑ Jan Jícha:

mám ještě problem, potřebuju aby se žádné číslo neopakovalo na celkově 7 buttonu kama to generuju, napsal jsem si for cyklus ale nefunguje mi to, a nemůžu najít chybu.

for ii:=1 to 7 do begin
                  repeat
                  ind:= random(49)+1;
                  znak[ii]:=ind;
                  until not (znak[ii]=KM[ii]);
                  KM[ii]:=znak[ii];
                  bt[ii].Caption:=intTOstr(ind);
                  end;

pole KM a znak jsem si dal ještě před tímto samé nuly a vytvoříl tím pádem

KM je kontrolní množina

takže do ind si dám náhodné číslo, to si dám do pole znak které porovnávam dokud se znak a KM nerovnají, když se nerovnají tak si ho napíšu na button a přidám to číslo do pole znak...

Díky


Jsou věci, které nikdy nepochopím.

Offline

 

#4 23. 12. 2013 14:55 — Editoval Bati (23. 12. 2013 14:55)

Bati
Příspěvky: 2469
Reputace:   192 
 

Re: delphi aplikace

↑ Dopikasan:
Ahoj,
můžeš to udělat tak, že si uděláš pole booleanů stejné délky jako počet buttonů, které bude reprezentovat, jestli číslo bylo už použito, nebo ne. V k-tém kroku cyklu pak vygeneruješ náhodné číslo x z rozsahu 1 ... n-k+1, vezmeš x-tý nepoužitý prvek a označíš ho za použitý.

Offline

 

#5 23. 12. 2013 23:14

Dopikasan
Příspěvky: 308
Škola: TUL FM
Pozice: student
Reputace:   
 

Re: delphi aplikace

↑ Bati:
moc tomu nerozumím, podle mě jsem si něco takového udělal

vygeneroval jsem si číslo, které jsem si dal do pole pomocného (znak)
když se toto číslo nerovná číslu v KM (kontrolní množině) tak se zapíše na button a uloží se do pole KM, pokud se rovnají vygeneruje se další náhodné číslo a děje se to samé.

jestli to je blbost, načrtnul bys mi prosím tvoji myšlenku? nějak mi na to nejde přijít.


Jsou věci, které nikdy nepochopím.

Offline

 

#6 24. 12. 2013 00:12

Bati
Příspěvky: 2469
Reputace:   192 
 

Re: delphi aplikace

↑ Dopikasan:
V tom tvém řešení nechápu proč tam máš zrovna tu 49 u toho randomu, každopádně tam ale nemůžeš mít pevné číslo, nemáš tak zaručeno, že vybereš všechna čísla.

Offline

 

#7 24. 12. 2013 10:13

Dopikasan
Příspěvky: 308
Škola: TUL FM
Pozice: student
Reputace:   
 

Re: delphi aplikace

↑ Bati:
Je to v zadání. Potřebuju dostat na 7 buttonu náhodné čísla od 1 do 49 a aby se neopakovali. (jako když se losuje sportka)


Jsou věci, které nikdy nepochopím.

Offline

 

#8 24. 12. 2013 11:59

LukasM
Příspěvky: 3274
Reputace:   193 
 

Re: delphi aplikace

↑ Dopikasan:
Ty při té kontrole "until not (znak[ii]=KM[ii])" neprobíháš celé pole KM, ale díváš se jen na aktuální prvek, ve kterém zatím není nic (tedy je tam nula, pokud bylo pole na začátku vynulované). Takže taková podmínka je splněná vždycky.

Buď uděláš to co navrhuje Bati, tedy uděláš si pole všech čísel od 1 do 49, a v každém kroku k vygeneruješ kolikáté zatím nepoužité číslo jsi vybral, dojedeš k němu, vezmeš ho a označíš za použité (např. přepsáním na nulu), nebo, a to by bylo možná jednodušší, napíšeš ten svůj cyklus správně. Třeba by po vygenerování čísla šlo vytvořit proměnnou boolean POUZITO, dát do ní false, jako že číslo ještě není použité, a pak projet celé pole KM (stačí ty zatím popsané prvky, tedy do indexu ii-1) a porovnat to vygenerované číslo se všemi prvky KM. Když někde bude shoda, nastavím si POUZITO na true a cyklus skončím. Podmínka v cyklu repeat pak bude něco jako "until not POUZITO"

Offline

 

#9 24. 12. 2013 12:31

Dopikasan
Příspěvky: 308
Škola: TUL FM
Pozice: student
Reputace:   
 

Re: delphi aplikace

↑ LukasM:
Díky, zkusím to asi zítra, tedka jsem na rychlo zkusil "vidláckou" metodu ale funguje :D

until not ((znak[ii]=KM[ii-1]) or (znak[ii]=KM[ii-2]) or (znak[ii]=KM[ii-3]) or (znak[ii]=KM[ii-4]) or (znak[ii]=KM[ii-5])or (znak[ii]=KM[ii-6]));

když je jen 7 prvků v poli tak to jde, kdyby jich tam bylo víc asi by to bylo silně nepraktické :p


Jsou věci, které nikdy nepochopím.

Offline

 

#10 24. 12. 2013 13:00

mák
Místo: Vesmír, Galaxie MD
Příspěvky: 920
Reputace:   63 
 

Re: delphi aplikace

Zdravím,
to co potřebuješ je:

Generování náhodných čísel bez opakování.

Nejednodušší řešení - napíšu to pouze pro 10 čísel, aby to bylo přehlednější, pro 49 je to stejné akorát je seznam delší - program ale není složitější.

Takže vygeneruji si seznam čísel z kterých budu volit:

Code:

[1,2,3,4,5,6,7,8,9,10]

Je dlouhý deset znaků, vyberu náhodně jeden z deseti. Pro příklad třeba třetí znak (ne trojku, ale opravdu třetí v pořadí - na tom místě je zrovna trojka):

Code:

[1,2,_,4,5,6,7,8,9,10]

Poslední znak přesunu na třetí pozici:

Code:

[1,2,10,4,5,6,7,8,9]

To je celý kód. Nyní se to již bude ve smyčce opakovat tolikrát kolik budu volit čísel.

Pro názornost pokračuji:
Mám devět znaků. Budu náhodně vybírat jedno z devíti. Třeba pátý znak:

Code:

[1,2,10,4,_,6,7,8,9]

Na pátém místě byla pětka. Poslední znak přesunu místo něj:

Code:

[1,2,10,4,9,6,7,8]

Zůstalo mi osm znaků. No a nyní již bude třetí průchod ve smyčce. A zase pokračuji stejným způsobem dokud nevyberu zvolený počet znaků (čísel).

Jednoduché a nemusím nic kontrolovat.


LibreOffice Verze: 25.8.4.2, Maxima 5.49.0 (SBCL)

Offline

 

#11 24. 12. 2013 15:20

Bati
Příspěvky: 2469
Reputace:   192 
 

Re: delphi aplikace

Doplním, že na této stránce je již uzavřená soutěž o nejrychlejší algoritmus řešící přesně tento problém. Nejrychlejší řešení nechápu a snad ho ani chápat nechci, ale to druhé nejlepší už je schůdné.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson