myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   VBA Zahlenraten (https://mygully.com/showthread.php?t=3006359)

davi96 17.08.13 12:24

VBA Zahlenraten
 
Hallo Leute

Ich bin in einer Informatikerlehre als Applikationsentwickler und habe die Aufgabe ein Zahlenratenspiel zu programmieren in VBA.

Code:

Sub Zahlenraten()

Dim i As Integer

i = Int((100 - 0 + 1) * Rnd + 0)

Do


a = InputBox("Bitte raten.")
   
    If i > a Then
    MsgBox "Grösser"
    End If
   
    If i < a Then
    MsgBox "Kleiner"
    End If
   
    If i = a Then
    MsgBox "Gewonnen"
    End If
   
Loop
   

End Sub

Es funktioniert auch mehr oder weniger, mein Problem ist, es ist immer die Zahl 71. Der Fehler muss beim generieren der Zufallszahl sein, aber ich finde ihn nicht. Vielleicht kann mir jemand von euch helfen?

Und es muss doch auch gehen ohne so viele If Abfragen? Im Internet habe ich viele Musterlösungen gefunden, aber ich möchte nicht einfach eine kopieren.

Grüsse
David

Quabla 17.08.13 14:01

wie funktioniert denn der zufalszahlen generator? ich nehmen mal an, das ist hier die methode rnd. allgemein, kann man zufallszahlengeneratoren einen so genannten "seed" übergeben. wenn man ein und den selben zufallsgenerator 2 mal mit dem gleichen seed aufruft, kommt auch die gleiche zahl raus. also guck am besten mal in die dokumentation dieser funktion, da gibt bestimmt was, was die systemzeit oder sowas als seed benutzt.


edit:
wenn du es gar nicht hinbekommst, schreib den zufallsgenerator einfach selber. hier ist mal ein linear kongruenter in c++. die zeilen in denen prev_rnd vorkommt, sorgen hier dafür, dass wenn man den generator ohne übergabeparameter mehrmals hintereinander ausführt, er trotzdem unterschiedliche zufallszahlen liefert. was aber nur dann funktioniert, wenn das programm in der zwischenzeit nicht beendet/ neu gestartet wird. ich tippe mal, dass der zufallsgenerator in vba ähnlich programmiert ist, und er deshalb immer mit einem speziefischem seed, in meinem fall der 0, anfängt, wenn man ihm nichts übergibt.
Code:

int rnd(int x = 0){
    static int prev_rnd = x;
    int m = 10000;
    int a = 1601;
    int b = 3456;
    if(x==0) x=prev_rnd;
    x = (a*x+b) % m;
    prev_rnd = x;
    return x;
}

der erzeugt jetzt zufallszahlen zwischen 0 und 10000. du musst also für deine zwecke:
Code:

i = Int((100 - 0 + 1) * Rnd()/10000. + 0)
verwenden

Berlin1992 17.08.13 14:56

Bevor du das erste Mal Rnd verwendest, musst du genau einmal Randomize aufrufen.

eitch100 18.08.13 14:42

So funzt es (hier mit nem CommandButton)... ohne Randomize ist der erste Zufall immer 71 und ohne 'Exit Sub' wird's ne Endlosschleife...


Und hier dasselbe quasi mit Versuchsauswertung...


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:12 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.