[VB6] Randomize ? NIET !

Pagina: 1
Acties:
  • 143 views sinds 30-01-2008
  • Reageer

  • LG_Greenman
  • Registratie: Maart 2001
  • Laatst online: 26-05 23:02
Alo

Ik heb net ff een programmaatje voor school gemaakt en het werkt allemaal ok, daar geen vraag over.

Maar nu ik het programma een aantal keer opstart krijg ik ELKE keer als eerste waarde 71 en als je dan op gemiddelde drukt altijd 54,7.

Dit terwijl ik een Randomize opdracht uitvoer.

VB is al opgedate tot SP5...

Klopt de randomize van VB niet ?

HX45/300w/Epox 8KHA+/XP1800@1620/768mb@2x143mhz Apacer/17"@Asus V6600 GF1/17"@ S3trio64V/SB1024 Live player/Kingston 110TX/20gig@7200rpm Maxtor/40gig@5400rpm Maxtor/27gig@5400 WD/JustCool CPUcooler/2x120mm en 3x80mm casefans/Plextor 40x/DVDR4x


  • KnoppenSpook
  • Registratie: Augustus 2000
  • Laatst online: 04-09-2023
laat eens wat code zien dan?

/me weet geen leuke quote voor in zijn signature


  • majornono
  • Registratie: Juni 2002
  • Laatst online: 04-04 23:16
als je eerst wat code geeft, kunnen we even kijken of je wat vergeten bent. Ik weet dat er randomize functies zijn in andere programmeertalen die je eerst moet initialiseren voordat je ze kunt gebruiken, dus misschien ben je dat vergeten.

Problem Exists Between Chair And Keyboard


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
majornono schreef op 07 January 2003 @ 13:32:
als je eerst wat code geeft, kunnen we even kijken of je wat vergeten bent. Ik weet dat er randomize functies zijn in andere programmeertalen die je eerst moet initialiseren voordat je ze kunt gebruiken, dus misschien ben je dat vergeten.


Dat zal in VB waarschijnlijk niet veel anders zijn.
Je zult dus eerst de randomizer moeten 'seeden'.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Een randomize is per definitie niet random.. :P (logisch he)
Aangezien een computer alles berekent, kan hij in theorie ook geen random nummer bedenken.

Vergelijk je code eens met deze:

http://www.devcity.net/pubs/article.asp?alias=randomnumbers

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

RANDOM NUMBERS

Rnd - Generates a random number between 0 and 1.
Randomize - Tells VB to randomly generate numbers for the rnd statement. Using randomize will allow the rnd statement to generate an entirely random set of numbers that do not follow any recognizable pattern.

Generating Numbers between 1 and 10:

Num = Int((10 - 1 + 1)* rnd + 1)

Generating Numbers between 1 and 100:

Num = Int((100 - 10 + 1)* rnd + 1)
Bron : http://bs0d.superterran.com/tutorials/vb/vb1/6.php

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:03
Ik wil niet moeilijk doen, hoor, maar van dezelfde auteur:
http://www.devcity.net/pubs/article.asp?alias=search_array |:(

I rest my case. Dan maar liever zelf nadenken. En dan te bedenken dat die code een score van 4 uit 5 krijgt! VB programmeurs. :X

  • LG_Greenman
  • Registratie: Maart 2001
  • Laatst online: 26-05 23:02
Do Until INTaantal = INTteller
INTcijfer = Round(Rnd() * INTmaxi, 0)
INTteller = INTteller + 1
LSlijst.AddItem (Str(INTcijfer))
If INTmax <= INTcijfer Then INTmax = INTcijfer
If INTcijfer <= INTmin Then INTmin = INTcijfer
INTsom = INTsom + INTcijfer
Loop


Hier berekend hij die dingen in...

en dit is het programma:

http://members.ams.chello.nl/j.groen6/Statje.exe

HX45/300w/Epox 8KHA+/XP1800@1620/768mb@2x143mhz Apacer/17"@Asus V6600 GF1/17"@ S3trio64V/SB1024 Live player/Kingston 110TX/20gig@7200rpm Maxtor/40gig@5400rpm Maxtor/27gig@5400 WD/JustCool CPUcooler/2x120mm en 3x80mm casefans/Plextor 40x/DVDR4x


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:03
Weer zo'n geslaagde bron:
Rnd - Generates a random number between 0 and 1.

[..]

Generating Numbers between 1 and 100:
Num = Int((100 - 10 + 1)* rnd + 1)
Nu zal ik wel gek zijn, maar als je 91 vermenigvuldigd met een getal tussen '0 en 1' (inclusief of exclusief 1?) en er 1 bij op telt, hoe kom je dan OOIT boven de 92 uit?

Ik denk dat de topic starter het van de officiele documentatie moet hebben, want van de tips, code en tutorials van medegebruikers moet je 't duidelijk niet hebben.

  • LG_Greenman
  • Registratie: Maart 2001
  • Laatst online: 26-05 23:02
Met dat "Randomize" erboven in de code doet hij het wel goed....

doet het nu dus goed :):)

Dank (nooit geweten dat je die moest initialiseren)

Nieuwe: http://members.ams.chello.nl/j.groen6/Statje2.exe

[ Voor 21% gewijzigd door LG_Greenman op 07-01-2003 13:49 ]

HX45/300w/Epox 8KHA+/XP1800@1620/768mb@2x143mhz Apacer/17"@Asus V6600 GF1/17"@ S3trio64V/SB1024 Live player/Kingston 110TX/20gig@7200rpm Maxtor/40gig@5400rpm Maxtor/27gig@5400 WD/JustCool CPUcooler/2x120mm en 3x80mm casefans/Plextor 40x/DVDR4x


  • KnoppenSpook
  • Registratie: Augustus 2000
  • Laatst online: 04-09-2023
Randomize 'rekent' een random getal uit, rnd vraagt dat getal op, zoiets is het dacht ik

/me weet geen leuke quote voor in zijn signature


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:03
LG_Greenman schreef op 07 januari 2003 @ 13:44:
Do Until INTaantal = INTteller
INTcijfer = Round(Rnd() * INTmaxi, 0)
INTteller = INTteller + 1
LSlijst.AddItem (Str(INTcijfer))
If INTmax <= INTcijfer Then INTmax = INTcijfer
If INTcijfer <= INTmin Then INTmin = INTcijfer
INTsom = INTsom + INTcijfer
Loop
Codetags. Quickstart.
Welkom in P&W -> Quickstart (update 2/10/2002) :Z

En waar staat die randomize van je dan? Moet 'ie die er zelf bij verzinnen ofzo?

Nu nog één keer voor de duidelijkheid: EERST roep je 'randomize' aan om de getallen (conceptueel) door elkaar te husselen. DAARNA kun je 'rnd' aanroepen om semi-willekeurige getallen te genereren. En dan te bedenken dat ik geen VB ken!

offtopic:
Note to self:
- VB topics mijden
- dokter om valium vragen

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
KnoppenSpook schreef op 07 January 2003 @ 13:49:
Randomize 'rekent' een random getal uit, rnd vraagt dat getal op, zoiets is het dacht ik


Nee hoor, Randomize gaat gewoon de random-generator gaan initialiseren.
En met Rnd vraag je dan idd een random getal op.
Maar zoals jij het zegt, zou je willen zeggen dat je iedere keer 'Randomize' moet aanroepen voor iedere Rnd, en dat is niet waar. ;)

https://fgheysels.github.io/


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:03
whoami schreef op 07 January 2003 @ 13:54:
Maar zoals jij het zegt, zou je willen zeggen dat je iedere keer 'Randomize' moet aanroepen voor iedere Rnd, en dat is niet waar. ;)
Sterker nog, als randomize intern de huidige tijd gebruikt om te seeden (zoals gebruikelijk is in andere talen) dan krijg je daardoor juist vaak hetzelfde getal. Of dat zo werkt, of dat men bij het ontwikkelen van VB rekening heeft gehouden met de doelgroep, weet ik echter niet precies.

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
Soultaker schreef op 07 januari 2003 @ 13:53:
[...]


offtopic:
Note to self:
- VB topics mijden
- dokter om valium vragen


Ik denk dat vooral dat laatste van toepassing is....
Een beetje kalm en relaxed blijven gewoon....

https://fgheysels.github.io/


  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 09:25

Super_ik

haklust!

zet
code:
1
randomize timer
in je code, ergens bij form_load ofzo

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Soultaker schreef op 07 January 2003 @ 13:53:
offtopic:
Note to self:
- VB topics mijden
- dokter om valium vragen

Soultaker, iets rustiger aan ajb. Als je jezelf er _zo_ erg aan stoort ga dan eventjes afkoelen, rondje lopen, whatever, maar houdt het hier een beetje gezellig ajb :)

  • Janoz
  • Registratie: Oktober 2000
  • Nu online

Janoz

Moderator Devschuur®

!litemod

KnoppenSpook schreef op 07 januari 2003 @ 13:49:
Randomize 'rekent' een random getal uit, rnd vraagt dat getal op, zoiets is het dacht ik



Nope. De random functionaliteit werkt eigenlijk meer als een soort (virtuele!) oneindige lijst met getallen. Waneer je rnd uitvoert word adhv het huidige getal (de seed van de volgende dus) bepaald wat de volgende in de 'lijst' is. Probleem is dat aan het begin de boel wel geinitialiseerd moet worden. Waneer je altijd met 0 begint zal altijd dezelfde lijst met getallen uit rnd halen. Om toch een verschillend startpunt te krijgen word als initiele seed meestal de huidige tijd in ms gebruikt. Dit is wat randomize doet (je kunt ook zelf een seed opgeven)...

Je moet nu trouwens niet denken dat er een enorme lijst met random getallen, maar meer aan een klein algoritme wat aan de hand van vorige getrokken waarden nieuwe bitjes genereert (mbv Xor)..

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
De "random" lijst is zeker niet oneindig; uit m'n hoofd is de lengte maximaal 2statebits-1, waarna je weer met 't eerste getal begint.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • KnoppenSpook
  • Registratie: Augustus 2000
  • Laatst online: 04-09-2023
ah, bedankt Janoz, weer wat geleerd :)

/me weet geen leuke quote voor in zijn signature


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:25

Crazy D

I think we should take a look.

De officiele docs zijn misschien toch het handigste (MSDN) en dan krijg je er zelfs gratis een sampletje bij:
code:
1
2
3
Dim MyValue
Randomize   ' Initialize random-number generator.
MyValue = Int((6 * Rnd) + 1)   ' Generate random value between 1 and 6.

Hoe duidelijk wil je het hebben...
(en de tekst in de hellup bij het Randomize statement en de Rnd function zijn ook niet verkeerd om eens te bekijken)

Exact expert nodig?


  • Janoz
  • Registratie: Oktober 2000
  • Nu online

Janoz

Moderator Devschuur®

!litemod

MSalters schreef op 07 januari 2003 @ 14:51:
De "random" lijst is zeker niet oneindig; uit m'n hoofd is de lengte maximaal 2statebits-1, waarna je weer met 't eerste getal begint.


Uiteraard, maar voor vb begrippen is dat redelijk oneindig ;) . Straks komt er iemand die gaat beweren dat je aan de hand van enkele gegenereerde random nummers kunt voorspellen wat het volgende getal wordt... (wat natuurlijk ook kan, maar dat duurt wel ff)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

MSalters schreef op 07 January 2003 @ 14:51:
De "random" lijst is zeker niet oneindig; uit m'n hoofd is de lengte maximaal 2statebits-1, waarna je weer met 't eerste getal begint.


idd, de meeste standaard random implementaties zijn gewoon een modulaire vermenigvuldiging, waarbij het getal waarmee vermenigvuldigd wordt een voortbrenger is van het modulo argument (wat idd 2x is, aangezien dat het makkelijkst is bij modulaire berekeningen op de pc)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 26-05 18:25

Sponge

Serious Game Developer

lol. Ik dacht net aan een Dilbert plaatje na het doorlezen van dit topic, snel opgezocht, wil ik het hier plakken, zie ik dat .oisyn die signature heeft!! Over toeval gesproken :D

Dilbert cartoon, Hier is ie te vinden.

Overigens staan op Pscode.comp verscheidene implementaties van zelfgemaakte Random number generators met verscheidene algoritmes (onder de VB sectie). Wellicht interessant om te bekijken. Persoonlijk is RND voor mij voldoende ;)

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

thanx! ik zocht m laatst :D
toevalligerwijs had ik m eergisteren ingesteld als sig :)

[ Voor 53% gewijzigd door .oisyn op 07-01-2003 18:14 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Randomize timer bij form_load werkt inderdaad, aangezien timer de tijd is tussen het aanroepen van windows, en het klaar zijn met opstarten van windows, die is dus nooit hetzelfde, dit betekent dat hij altijd een random lijst maakt met als seed de timer, en dan issie toch random
Pagina: 1