Avatar billede lillehans Nybegynder
23. april 2006 - 22:35 Der er 28 kommentarer og
1 løsning

Random til brug for en division der går op

Kan man få nogle random tal, der kan divideres med og gå op med  2:
Kan man få nogle random tal, der kan divideres med og gå op med  3:

Kan man få nogle random tal, der kan divideres med og gå op med  4:
osv?
Avatar billede erikjacobsen Ekspert
23. april 2006 - 22:38 #1
Ja, tag et random heltal, og gang det med 3 - så vil 3 gå op. Sikkert tilsvarende for 2 og 4.
Avatar billede kabbak Professor
23. april 2006 - 22:43 #2
Do
Tal1 = Int((9 * Rnd) + 1)
Loop Until Tal1 Mod 2 = 0 ' kører løkken indtil tallet går op i 1
Avatar billede kabbak Professor
23. april 2006 - 22:44 #3
Går op i 2 selvfølgelig. ret 2 til 3 hvis det skal gå op i 3
Avatar billede lillehans Nybegynder
23. april 2006 - 23:13 #4
>kabbak Det kan jeg ikke oversætte.
Kunne jeg bede om lidt mere kode?
Hvis nu jeg vil have returneret tallet, (det tilfældige)  der kan divideres med 2 i text1.txt  og tallet 2 i text2.text
og resultatet af denne division i text3.text, hvordan skal koden i en command1.click så se ud?
Avatar billede erikjacobsen Ekspert
23. april 2006 - 23:15 #5
Der er ingen grund til at bruge kabbaks kode - spild af ressourcer.

  tezt1.text=Int((9 * Rnd) + 1)*3
Avatar billede kabbak Professor
23. april 2006 - 23:22 #6
Erikjacobsen, det er igtig, men dit tal bliver så som det største 21 og ikke 9, min holder sig inden for det maks der er skrevet.

> lillehans;

du har normalt din random sådan

Tal1 = Int((9 * Rnd) + 1)


det eneste du skal gøre er at sætte

Do
før og
Loop Until Tal1 Mod 2 = 0

efter, det sørger for at tallet går op i 2, den kører bare random indtil tallet passer
Avatar billede arne_v Ekspert
23. april 2006 - 23:25 #7
3*9 er 27 ikke 21

og hvor står der noget om at maksimum er 9 ?
Avatar billede erikjacobsen Ekspert
23. april 2006 - 23:26 #8
Spørgeren har ikke angivet noget maksimalt tal, og er sikkert selv i stand til at ændre 9-tallet til noget for spørgeren fornuftigt. Det er hul i hovedet at lave en løkke til at løse det problem.
Avatar billede kabbak Professor
23. april 2006 - 23:29 #9
Ok, jeg kan godt se fornuften i det, jeg plejer bare at bruge det andet, så det var mit bidrag ;-))
Avatar billede lillehans Nybegynder
23. april 2006 - 23:32 #10
>Jeg er en ren novice og har ikke skyggen af en chance for at få din kode til at fungere, hvis jeg ikke får lidt mere kode af dig. Kunne jeg ikke få det synligt:
Se venligst 23:13:36?
Avatar billede lillehans Nybegynder
23. april 2006 - 23:35 #11
>erikjacobsen Også din kode er for "utydelig" for mig. Og til alle deltagere husk venligst at lave et svar, så I kan få points for jeres hjælp.
Avatar billede erikjacobsen Ekspert
23. april 2006 - 23:39 #12
Så vis os den kode du har der ikke virker.
Avatar billede arne_v Ekspert
23. april 2006 - 23:39 #13
Rnd returnerer et decimal tal 0.0 <= x < 1.0

Rnd*10 returnerer et decimal tal 0.0 <= x < 10.0

Fix(Rand*10) returnerer et hel tal 0 1 2 3 4 5 6 7 8 9

3*Fix(Rand*10) retunerer et heltal 0, 3, 6, 9, 12, 15, 18, 21, 24, 27
Avatar billede kabbak Professor
23. april 2006 - 23:42 #14
Private Sub Command1_Click()
Do
tal1 = Int((9 * Rnd) + 1)
tal2 = Int((tal1 * Rnd) + 1)
Loop Until tal1 Mod tal2 = 0 ' kører løkken indtil tallet går op i tal1
Text1.Text = tal1
Text2.Text = tal2
End Sub
Avatar billede erikjacobsen Ekspert
23. april 2006 - 23:46 #15
Hvis du så skriver

Private Sub Command1_Click()
Text1.Text = Int((9 * Rnd) + 1)*3
Text2.Text = 3
End Sub

...hvad sker der så? VB er ikke min stærke side, så der kan sagtens være fejl - fortæl hvad der sker hos dig.
Avatar billede lillehans Nybegynder
23. april 2006 - 23:58 #16
>kabbak din kode modsvarer vist mine behov. Så lav lige et svar.
Avatar billede kabbak Professor
23. april 2006 - 23:59 #17
et svar ;-))
Avatar billede lillehans Nybegynder
24. april 2006 - 00:09 #18
>mange tak for hjælpen kabbak. Også tak til erikjacobsen og arne v for deltagelsen.
>erikjacobsen, jeg går ud fra, at du taler med arne v!
Avatar billede erikjacobsen Ekspert
24. april 2006 - 00:12 #19
Nej, ham taler jeg ikke med ;)
Jeg forsøger bare at få dig til at forstå at det ikke er den bedste løsning med en løkke, og at den løsning kabbak kommer med ikke holder i længden. Skal du finde tal, hvor fx 7913 går op, vil der gå en rum tid før du finder et. Den løsning jeg skitserer for dig har ikke det problem.
Avatar billede lillehans Nybegynder
24. april 2006 - 00:43 #20
>erikjacobsen Det er jeg ked af at høre, for så har jeg misforstået forløbet.
Som sagt er jeg ikke særlig velbevandret i VB og sætter mig kun ind i de ting, som jeg skal bruge for at lave det ene eller det andet.
Det jeg forsøger at lave nu er et øveprogram i regning for børn, og jeg vil nok ikke udsætte dem for en divisor på 7913, men jeg forstår da problemet, principielt.
Jeg håber, at vi er lige gode venner af den grund!
Avatar billede erikjacobsen Ekspert
24. april 2006 - 00:48 #21
Ja, hvis du principielt forstår problemet, så er vi venner. Hvis du prøver hvad jeg skitserer, så er vi også gode venner ;)
Avatar billede kabbak Professor
24. april 2006 - 08:44 #22
Private Sub Command1_Click()
tal2 = Int((9 * Rnd) + 1)' divisor ,tal mellem 1 og 9
tal1 = Int((9 * Rnd) + 1)*tal2' tal mellem 1 og 9 ,ganget med divisor, her max. 81
Text1.Text = tal1
Text2.Text = tal2
End Sub

Lillehans, jeg er enig med de andre, det er nok best at lave den sådan her, der er inggen løkke, så den er hurtigst.
Avatar billede lillehans Nybegynder
24. april 2006 - 09:05 #23
Tak, jeg prøver den i stedet for. Tak til jer alle.
Avatar billede lillehans Nybegynder
25. april 2006 - 21:40 #24
>Hej kabbak!
Se din første kode respekterer, at såvel dividend som divisor er 1-cifrede tal. Det gør den anden kode ikke?
Jeg skal helst kunne styre om der skal regnes med 1- eller 2- eller 3-cifrede tal!
Er der nogen løsning på det?
Avatar billede arne_v Ekspert
26. april 2006 - 03:28 #25
og du vil stadig have en lige fordeling P(3)=1/3 P(6)=1/6 P(9)=1/3 ?

Fix(3 * Rnd()) * 3 bør give 3,6,9

PS: 08:44:40 vil så vidt jeg kan se ikke give en jævn fordeling af tal1
Avatar billede lillehans Nybegynder
26. april 2006 - 08:15 #26
>arne v Nej, jeg søger ikke nogen lige fordeling. Jeg søger et tal der kan divideres med et andet tal og gå op i tallet. Det er et program, hvor børn skal kunne øve sig i at dividere, og for ikke at gøre det for kompliceret på dette niveau, skal tallet kunne gå op. Og der skal jo helst være forskellige regnestykker.
Avatar billede kabbak Professor
26. april 2006 - 18:44 #27
Den eneste måde, så vidt jeg kan se, er så koden fra 23/04-2006 23:42:04, der opfylder dit kriterie, men som sagt, kører den i loop indtil at den finder noget der går op, det gør at koden,kan blive langsom ved større tal.
Avatar billede arne_v Ekspert
26. april 2006 - 19:15 #28
03:28:58 boer giv edet

hmm - nej den giver 0,3,6

men saa maa

Fix(3 * Rnd() + 1) * 3

give 3, 6, 9

med lige fordeling
Avatar billede erikjacobsen Ekspert
26. april 2006 - 22:10 #29
Jeg er ikke helt sikker på, hvad det er du mangler i ovenstående. Men tænk på dine divisionsopgaver som multiplikationsopgaver. Du vælger små "a" og "b" tilfældigt. Du udregner "c=a*b", og vupti har du et divisionsstykke. "Hvad er c/b?" Du har svaret "a", som du kan sammenligne med opgaveløserens svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester