Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [Visual Basic] Willekeurige volgorde (https://forum.scholieren.com/showthread.php?t=221092)

Amidala 18-09-2002 16:09

[Visual Basic] Willekeurige volgorde
 
Probleem: Een woordenreeks moet in willekeurige volgorde gezet worden, en dan in de labels in het interface getoond worden.

Oplossing: ???

Ik kon er zou gauw niet op komen hoe dit zou moeten. Iemand die me kan helpen?

Lethalis 18-09-2002 16:11

'randomize'

Maak een lijst aan met woorden. Elk woord krijgt een indexnummer. Randomize de lijst met nummers. Orden de woorden volgens die nummers.

Zoiets? Ik heb al jaren niet meer met VB geprogrammeerd, maar dit komt zo in me op.

Amidala 18-09-2002 18:50

Citaat:

******** schreef:
'randomize'

Maak een lijst aan met woorden. Elk woord krijgt een indexnummer. Randomize de lijst met nummers. Orden de woorden volgens die nummers.

Het gaat mij er meer om hoe ik dit in VB moet krijgen

Zover als dit was ik ook gekomen, maar om het nou ook nog werkende te krijgen was een tweede....

Lethalis 18-09-2002 19:11

Citaat:

Amidala schreef:
Het gaat mij er meer om hoe ik dit in VB moet krijgen

Zover als dit was ik ook gekomen, maar om het nou ook nog werkende te krijgen was een tweede....

Ik kan je alleen maar ideeën geven, aangezien ik VB5 niet direct tot mijn beschikking heb (zou ik eerst weer moeten installeren, alleen voor jou :p ).

Ik zou de woorden in een string-array plaatsen. Op die manier kun je ze opvragen aan de hand van hun index. Ook weet je hoeveel woorden je hebt.

De taak is nu een random getal op te roepen tussen 1 en het aantal woorden, met de eis dat het nog niet eerder voor is gekomen. Als je dat lukt, kun je de woorden in willekeurige volgorde oproepen.

Als eerste initialiseren we de random-feed met de randomize functie. Dit doen we maar 1 keer, namelijk als het programma start.

Code:

Private Sub Form_Load()
  Randomize
End Sub

Willen we nu een willekeurig getal i tussen 1 en X, waarbij X het aantal woorden is, dan doen we dat met de rnd functie:

Code:

i = Int(X * Rnd) + 1
Tot zover niets moeilijks. Het wordt echter tricky, omdat we geen dubbele willen krijgen. Dit zou je quick'n'dirty kunnen regelen door een tweede array van integers aan te maken, allemaal met de waarde 0 (en 1 als het al geweest is). Indien een getal verkregen wordt, kun je controleren of het al geweest is, alvorens je verder gaat (bijvoorbeeld met een while-wend loop en een geneste for-loop).

Succes :)

Marcade 18-09-2002 20:01

Zoals ******** al zei ja, plaats het in een array, randomize de array, en dan zet je ze in je labels.

Je labels geef je dezelfde naam maar elk een apart index nummer, zodat je makkelijker je array in de labels kan stoppen.

DIM Array(3)

Randomize Timer

Array(0)="Woord1"
Array(1)="Woord2"
Array(2)="Woord3"
Array(3)="Woord4"

FOR I%=0 TO 3
Temp=Array(I%)
J%=INT(RND * 4)
Array(I%)=Array(J%)
Array(J%)=Temp
Label(I%).caption = Array(I%)
NEXT I%

en klaar.

ofzo iets dergelijks

Amidala 18-09-2002 20:23

Citaat:

Marcade schreef:
Zoals ******** al zei ja, plaats het in een array, randomize de array, en dan zet je ze in je labels.

Je labels geef je dezelfde naam maar elk een apart index nummer, zodat je makkelijker je array in de labels kan stoppen.

DIM Array(3)

Randomize Timer

Array(0)="Woord1"
Array(1)="Woord2"
Array(2)="Woord3"
Array(3)="Woord4"

FOR I%=0 TO 3
Temp=Array(I%)
J%=INT(RND * 4)
Array(I%)=Array(J%)
Array(J%)=Temp
Label(I%).caption = Array(I%)
NEXT I%

en klaar.

ofzo iets dergelijks


dit werkt zo niet.......

Marcade 18-09-2002 20:30

Citaat:

Amidala schreef:
dit werkt zo niet.......
Nee, maar het gaat om het idee.

Lethalis 18-09-2002 20:32

Citaat:

Marcade schreef:
FOR I%=0 TO 3
Temp=Array(I%)
J%=INT(RND * 4)
Array(I%)=Array(J%)
Array(J%)=Temp
Label(I%).caption = Array(I%)
NEXT I%

RND alleen geeft geen garantie op unieke selectie. Je zou nu bijvoorbeeld 3,2,1,1 terug kunnen krijgen.

Misschien dat het bij 4 woorden meestal goed gaat, maar bij 1000 woorden zul je met dat algoritme niet ver komen.

Lethalis 18-09-2002 20:36

Citaat:

Amidala schreef:
dit werkt zo niet.......
De bedoeling blijft uiteindelijk wel dat je het zélf doet :p

Tenzij je me heel lief aankijkt en ik zo nostalgisch ben om VB5 Professional uit mijn stoffige doos van oude software te halen (maar die kans is niet zo groot :p ).

Marcade 18-09-2002 20:39

*zucht*

www.marcade.net/Huiswerk.zip

Marcade 18-09-2002 20:40

Citaat:

******** schreef:
RND alleen geeft geen garantie op unieke selectie. Je zou nu bijvoorbeeld 3,2,1,1 terug kunnen krijgen.

Misschien dat het bij 4 woorden meestal goed gaat, maar bij 1000 woorden zul je met dat algoritme niet ver komen.

Waar heb je het over?

Ik ga elk veld langs en switch hem random met een ander veld.

Er is een kans dat die op zijn originele plek terug komt, maar dat boeit niet, die kans moet ook bestaan.

Lethalis 18-09-2002 20:43

Citaat:

Marcade schreef:
Waar heb je het over?

Ik ga elk veld langs en switch hem random met een ander veld.

Ghehe :D

Okay, is goed :) Ik las er te snel overheen, zie nu wel wat je doet. Is een stuk beter dan mijn extra array :)

Lethalis 18-09-2002 20:43

Citaat:

Amidala schreef:
dit werkt zo niet.......
Wat gaat er precies fout dan?

Marcade 18-09-2002 20:47

Citaat:

******** schreef:
Ghehe :D

Okay, is goed :) Ik las er te snel overheen, zie nu wel wat je doet. Is een stuk beter dan mijn extra array :)

*kick* .. ik ben beledigd. :D

Dacht je nou echt dat ik zoiets als

Array2(I%)=Array1(RND*20) zou doen.? :D

poe hee. Nee zoals je ziet, ik ga elke plek langs, en wissel de waarde om met een willekeurige waarde ergens anders in de array. Dus elk veldje word een keer ergens anders heengeplekt. Resultaat: een geshockte array met nog steeds alleen maar unieke woorden.

Lethalis 18-09-2002 20:57

Citaat:

Marcade schreef:
*kick* .. ik ben beledigd. :D
Geniet er maar van, meneer met de geblokkeerde account door lekke server :) :D :p

Hmm, door het lezen van literatuur over Psychologie en Filosofie gaan mijn programmeerkunsten er niet bepaald op vooruit :o

Marcade 18-09-2002 21:01

Citaat:

******** schreef:
Geniet er maar van, meneer met de geblokkeerde account door lekke server :) :D :p

Hmm, door het lezen van literatuur over Psychologie en Filosofie gaan mijn programmeerkunsten er niet bepaald op vooruit :o

'k heb een collega bij IBM; (een joegoslaaf. Een hele aardige hoor. :) ) en hij studeert en zoekt heel veel dingen uit. (net als jou ********).

Maar bij hem heb ik soms wel is het gevoel, dat als die met een programmeerprobleem opgezadeld zit, dat die *eerst* de meest briljante en moeilijkste oplossing probeert te bedenken, met behulp van wat die allemaal geleerd heeft op school, voordat die gewoon simpel stap voor stap een oplossing zoekt.

We pesten hem soms wel is, omdat die, als je hem iets vraagt, altijd wel met een 'ja .. maaaarrr' .. of een 'neee, maaar ..' antwoord komt. :)

Lethalis 18-09-2002 21:13

Citaat:

Marcade schreef:
Maar bij hem heb ik soms wel is het gevoel, dat als die met een programmeerprobleem opgezadeld zit, dat die *eerst* de meest briljante en moeilijkste oplossing probeert te bedenken, met behulp van wat die allemaal geleerd heeft op school, voordat die gewoon simpel stap voor stap een oplossing zoekt.
Je klinkt als mijn vader .. als hij over mij praat :o

Marcade 18-09-2002 21:33

Citaat:

******** schreef:
Je klinkt als mijn vader .. als hij over mij praat :o
:|

Lethalis 18-09-2002 21:45

"De mensen die het wiel opnieuw uitvinden worden niet gezocht" .. zegt hij wel eens tegen me. Daarmee bedoelt hij dat ik te veel mijn eigen oplossingen voor alles heb, in plaats van dat ik gewoon effectief een probleem oplos.

Zo heb ik voor kantoor het facturatie-systeem geprogrammeerd. Als ik dit met VB en Access had gedaan, was het misschien in 3 dagen af.

Maar nee, ik moest het per sé met BCB (C++ en statisch gelinkt) doen, zodat het programma ad hoc overal werkt. Dat ik hierdoor ook een eigen database-engine moest ontwerpen (BDE heb ik geen licenties voor) stoorde me niet :o

Het duurde uiteindelijk 2 weken.

Als ik ergens anders ga werken, zal ik daar dan ook hard aan moeten werken .. gewoon doen "wat de klant wil" en niet mijn eigenwijze kop doorzetten :D


Alle tijden zijn GMT +1. Het is nu 19:20.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.