myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

VBA Zahlenraten

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 17.08.13, 12:24   #1
davi96
Erfahrener Newbie
 
Registriert seit: Sep 2009
Beiträge: 112
Bedankt: 7
davi96 ist noch neu hier! | 0 Respekt Punkte
Standard 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
davi96 ist offline   Mit Zitat antworten
Ungelesen 17.08.13, 14:01   #2
Quabla
Mitglied
 
Registriert seit: Oct 2010
Beiträge: 296
Bedankt: 151
Quabla ist noch neu hier! | 0 Respekt Punkte
Standard

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
Quabla ist offline   Mit Zitat antworten
Ungelesen 17.08.13, 14:56   #3
Berlin1992
¥
 
Registriert seit: Jul 2013
Beiträge: 6
Bedankt: 3
Berlin1992 ist noch neu hier! | 0 Respekt Punkte
Standard

Bevor du das erste Mal Rnd verwendest, musst du genau einmal Randomize aufrufen.
Berlin1992 ist offline   Mit Zitat antworten
Ungelesen 18.08.13, 14:42   #4
eitch100
Agnostiker
 
Benutzerbild von eitch100
 
Registriert seit: Dec 2009
Beiträge: 4.429
Bedankt: 4.843
eitch100 leckt gerne myGully Deckel in der Kanalisation! | 1147872512 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1147872512 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1147872512 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1147872512 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1147872512 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1147872512 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1147872512 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1147872512 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1147872512 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1147872512 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1147872512 Respekt Punkte
Standard

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...
__________________
Der Klügere gibt nach... deshalb regieren die Dummen die Welt
eitch100 ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:20 Uhr.


Sitemap

().