Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB: Randomize näyttäjä

Sivun loppuun

Grey [14.11.2002 18:46:28]

#

Moni Qbasicin käyttäjä tietää varmasti Randomizen. Sen systeemin, jolla saa aikaan täysin satunnaisia lukuja tai muita, vai saako? Tässä on pieni esimerkki sen käytöstä. Ohjelma arpoo lukuja 0 ja 1000 välillä. Jos tulee luku tuhat, ohjelma lopetetaan. Bonuksena se tallentaa kaikki arvotut luvut tiedostoon, mistä niitä voi tutkia. Jos muutatte tuon 1000 vaikka esim. 457 niin se vaikuttaa ohjelmaan yllättävänkin paljon. Kokeilkaa ja huomaatte että Randomize ei taidakaan olla ihan täysin satunnainen.

-Grey-

RANDOMIZE TIMER
CLS
start! = TIMER
OPEN "Rndtest.txt" FOR OUTPUT AS #1
DO
a = INT(RND * 1000 + 1)
PRINT a
PRINT #1, a
IF a = 1000 THEN EXIT DO 'Muuttakaas tätä lukemaa hiukkasen
LOOP
finish! = TIMER
s = finish! - start!
PRINT "Aikaa meni"; s; "sek!"
PRINT #1, s
CLOSE #1

thefox [15.11.2002 11:16:56]

#

Hmm.. mitä yrität tässä nyt tarkalleen ottaen todistaa?
On itsestään selvää, että QB:n RND-funktion tuottamat luvut eivät ole täysin satunnaisia, vaan perustuvat seediin, joka annetaan RANDOMIZE -käskyllä (tässä tapauksessa TIMER, jolla saadaan eräänlainen satunnaisuus).
Jos pistää RANDOMIZE 123, antaa QB joka ohjelman suorituksella samat arvot. Näin saadaan aikaan satunnaisuus, joka on joka kerta samanlainen, mutta silti satunnaisen tuntuinen. Hyötyä mm. demoefekteissä, jos niiden halutaan näyttävän aina samoilta.
Turvallisuutta ei RANDOMIZE TIMER-tyylisillä satunnaisuuksilla saa pätkän vertaa minkä takia niitä ei tulisi käyttää mihinkään vakavampaan kuten kryptografia avainparien tekemiseen (esim. RSA).
Joo...

Grey [15.11.2002 13:18:11]

#

Randomissa kaikkein suurin, ehkä pieninkin, luku tulee kaikkein suurimmalla todennäköisyydellä kohdalle. Tuo koodi näyttää sen homman ja samalla siinä on ajastin, joka kertoo miten pitkään kesti ennenkuin kyseinen luku tuli kohdalle. Mitä hyötyä tuosta koodista muuten oli, sitä ei kannata minulta kysyä. Tein tuon meinaan aamuyöllä ja nappasin tänne. Noh, jaah. Ainakin siitä näkee Randomizen periaatteen, luulisin...

-Grey-

KimmoKM [15.11.2002 14:12:47]

#

No kysytään sitten. Mitä hyötyä tuosta koodista on?

Grey [15.11.2002 15:17:18]

#

Kun käy täällä aamuyöstä, on todennäköisesti hankala keksiä millekään myöhemmin mitään järkevää selitystä. Jos minun pitäisi kuitenkin hyödyntää tuota koodia, noh, ainakin siitä näkee Randomizen käyttöä, tiedostoon kirjoittamista ja aikalaskurikin löytyy siitä. Kuten sanottu, aamuyö on aamuyö.

-Grey-

mikkot [15.11.2002 15:51:23]

#

Aamuyö ei tekoajankohtana lievennä rikoksien tuomitsemista oikeassakaan elämässä - ei siis täälläkään!

Grey [15.11.2002 19:12:55]

#

Aina voi tehdä mielentilatutkimuksen :-) Kuitenkin, jos ei muuta, paljastaa ainakin tuo joitain heikkouksia Randomizen käytössä.. Hm.. Jooh, kyllä tuosta on hyötyä. Tajusin nimittäin että saatan joutua miettimään erään projektini vähän uudelleen. Jos kerran RANDOMIZE TIMER valitsee helpoiten suurimman luvun, täytynee keksiä jokin toinen siihen tilalle. Ei muuten, mutta ne jotka tuntevat RQ ja D100, tietävät että heitto 100 on täydellinen epäonnistuminen aina. Jooh, olen pienehkön rooliseikkailun kimpussa.

-Grey-

Tumpi [15.11.2002 22:13:09]

#

Ihan kätsä aloittelijoille (kuten minulle).

kala [20.11.2002 19:47:12]

#

en tajua mikä tuon "vinkin" idea on?

KimmoKM [23.11.2002 10:43:53]

#

Tuli tässä vain tehtyä salausohjelma joka käyttää tätä "satunnaisuutta"

Heikki [24.11.2002 08:31:11]

#

Aika yksinkertainen...

Lähinnä siitä oppii (tai ainakin minä opin) aikalaskurin...

siansaksamies [02.11.2005 15:46:56]

#

Voisiko joku ystävällisesti kertoa, miten tuon saisi suljettua Esc-nappulalla, sillä kun a:n arvoa nostaa yli 1000, arvoo kone loputtomasti lukuja ja tulos on lopuksi kovalevyn täyttyminen.

Dude [21.08.2007 16:39:44]

#

siansaksamies kirjoitti:

Voisiko joku ystävällisesti kertoa, miten tuon saisi suljettua Esc-nappulalla, sillä kun a:n arvoa nostaa yli 1000, arvoo kone loputtomasti lukuja ja tulos on lopuksi kovalevyn täyttyminen.

IF INKEY$ = CHR$(27) then
  close #1:end
end if

Niin ja huomaa että ei oo täysin random.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta