Problem mit meinem Lotto System

  • VB6

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Derfuhr.

    Problem mit meinem Lotto System

    Moin Community,
    Ich habe mal wieder ein doofes Problem. Ich muss ein Lotto-Spiel programmieren welches auch bisher fehlerfrei läuft, nur gibts da eine Sache. Ich muss jetzt prüfen lassen ob die Zahlen im Array Doppelt vorhanden sind, und wenn ja, sollen sie ersetzt werden mit einem anderen Wert damit sie nicht mehr gleich sind. An sich klingt das ziemlich einfach nur steige ich in meinem Code selber gerade kaum noch durch und verzweifle gerade daran. Egal was ich mache, sobald ich die Lottozahlen anzeigen lasse gibt es manchmal trotzdem eine Zahl doppelt.
    Hier habt ihr den Sourcecode, ich hoffe ich kriege irgendwie Hilfe!

    Visual Basic-Quellcode

    1. Private Sub btn_auswerten_Click()
    2. Randomize
    3. 'Zahlenvergabe
    4. Ziehung = 0
    5. While Ziehung < 6
    6. Ziehung = Ziehung + 1
    7. Do
    8. ' Zufallszahl zwischen 1 und 49
    9. Zahl = Int(49 * Rnd + 1)
    10. ' Prüfen ob Zufallszahl bereits gezogen wurde
    11. Ergebnis = True
    12. For I = 1 To Ziehung
    13. If ZahlenArray(I) = Zahl Then
    14. Ergebnis = False: Exit For
    15. End If
    16. Next I
    17. Loop Until Ergebnis = True
    18. ZahlenArray(Ziehung) = Zahl
    19. 'Array Werte werden sortiert nach Größe.
    20. For K = 1 To 6
    21. For I = 1 To 7
    22. If ZahlenArray(K) > ZahlenArray(I) Then
    23. temp = ZahlenArray(K)
    24. ZahlenArray(K) = ZahlenArray(I)
    25. ZahlenArray(I) = temp
    26. End If
    27. Next I
    28. Next K
    29. Wend
    30. ' Lottozahlen anzeigen
    31. For I = 1 To 6
    32. lbl_ziehung(I).Caption = ZahlenArray(I)
    33. Next I
    34. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ReisenderHippie“ ()

    ReisenderHippie schrieb:

    ' Prüfen ob Zufallszahl bereits gezogen wurde
    Du verwendest das Ergebnis nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hier ein Beispiel einer Lotto-Simulation 6 aus 49 mit Zusatzzahl:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private rnd As New Random
    3. Private numbers As List(Of Integer)
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. numbers = New List(Of Integer)
    6. While numbers.Count < 7
    7. Dim number As Integer = rnd.Next(1, 50)
    8. If Not numbers.Contains(number) Then
    9. numbers.Add(number)
    10. End If
    11. End While
    12. MessageBox.Show(String.Join(","c, numbers))
    13. End Sub
    14. End Class


    Edit: Sorry hatte zu spät bemerkt, dasses um VB6 geht X/

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Derfuhr“ ()

    Und hier eine 6 aus 49 Simulation ohne Zusatzzahl :) :

    C#-Quellcode

    1. Random rand = new Random();
    2. HashSet<int> result = new HashSet<int>();
    3. while (result.Count < 6)
    4. result.Add(rand.Next(1, 49));

    Deine, sich nicht wiederholenden Zahlen, stecken nun im HashSet 'result'.

    Edit: Sorry ich hatte auch zu spät bemerkt, dass es um VB6 geht :whistling:
    Schau dir mal meins und das von dort an, komischerweise krieg ich trotzdem manchmal einfach so doppelte Zahlen. Und dazu kommt noch das die Zahlen teilweise unter 6 sind, die mir angezeigt werden.

    //EDIT:
    Ich habe das generieren der Zahlen von dem übernommen und überarbeitet auf meine Labels, Variablen usw. An sich geht es nur sind manchmal doppelte zahlen & zahlen unter 6 dabei.
    man fühl ich mich scheiße weil ich VB6 lernen muss...unser Lehrer sagt "Das gute an VB6 ist das es pure Programmierung ist in der viele Funktionen die heute selbstverständlich sind nicht vorhanden sind, die du selber programmieren musst, daran lernst du alle grundlagen und das denken schneller". Irgendwo stimmt das zwar..aber...vb6...ernsthaft? ._.
    So hab nun extra die alte CD rausgesucht um das mal anzutesten, der Code bei vbarchiv den @diylab postete funktioniert bei mir einwandfrei. Hier nun auch aufsteigend sortiert:

    Visual Basic-Quellcode

    1. Dim Lottozahl(7) As Integer
    2. Private Sub Command1_Click()
    3. Randomize -Timer
    4. Dim Ziehung As Integer
    5. Dim i As Integer
    6. Dim Result As Boolean
    7. Dim Zahl As Integer
    8. Ziehung = 0
    9. While Ziehung < 7
    10. Ziehung = Ziehung + 1
    11. Do
    12. Zahl = Int(49 * Rnd + 1)
    13. Result = True
    14. For i = 1 To Ziehung - 1
    15. If Lottozahl(i) = Zahl Then
    16. Result = False: Exit For
    17. End If
    18. Next i
    19. Loop Until Result = True
    20. Lottozahl(Ziehung) = Zahl
    21. Wend
    22. Sortieren
    23. End Sub
    24. Private Sub Sortieren()
    25. Dim temp As Integer
    26. For i = 2 To 6
    27. For j = i To 2 Step -1
    28. If Lottozahl(j) < Lottozahl(j - 1) Then
    29. temp = Lottozahl(j)
    30. Lottozahl(j) = Lottozahl(j - 1)
    31. Lottozahl(j - 1) = temp
    32. End If
    33. Next
    34. Next
    35. Dim Msg As String
    36. Msg = "Die Lottozahlen lauten: "
    37. For i = 1 To 7
    38. Select Case i
    39. Case 1 To 5
    40. Msg = Msg & Format$(Lottozahl(i)) & ", "
    41. Case 6
    42. Msg = Msg & Format$(Lottozahl(i)) & " und die Zusatzzahl lautet: "
    43. Case 7
    44. Msg = Msg & Format$(Lottozahl(i)) & "."
    45. End Select
    46. Next i
    47. MsgBox Msg
    48. End Sub


    Irgendwie hat dein Lehrer schon recht, so lernt manns wirklich besser. Aber zum produktieven Einsatz ist VB.Net besser geeignet.

    ReisenderHippie schrieb:

    Natürlich benutze ich das Ergebnis
    Natürlich...
    Sieh Dir bitte Deinen Code daraufhin noch mal an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Was Dein Lehrer da züchtet, sind Menschen, die dann später (falls sie jemals wieder Programmieren) mit modernen Werkzeugen aktueller Programmiersprachen nicht umgehen können und bestenfalls prozedurales Programmieren kennen und am allerbesten in einem Projekt 1000 globale Variablen verwenden die dann diesem Teil zu einem putzigen Eigenleben verhelfen.
    Ich kenne selbst solch einen Unhold, der 10 Jahre VBA-Access gebrauchte und mir in 2 Jahren alle meine .NET Projekte (die er pflegen musste) bis zur Unkenntlichkeit zerballert hat - dieser Wurm :D .
    Ja C bzw. C++ find ich schon eine feine Sache, versteh grad net wirklich warum ihr mit VB anfangt, wenn ihr eh mit C/C++ weitermacht. Wenn es dem Lehrer nur darum geht, das im es Framework so viele selbstverstädliche Funktionen gibt, die ihr vonne Picke auf lernen(entwickeln zu lernen) sollt, hättet ihr direkt von anfang an die C-Syntax geniessen sollen.

    Ich z.B. hab damals mit VB.Net angefangen, weil es massenweise Codes via google gibt, hätte ich damals jemandem gehabt der mir das richtig in C/C++ erklärt, hätte ich niemals mit VB.net angefangen und müsste mich jetzt nicht(auch wenn ich es will) mit C/C++ mehr oder weniger "quälen". Obwohl ich sagen muss, das das Net.Framework auch in sehr mächtiges Werkzeug ist.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Derfuhr“ ()