Zufallszahlen Generator

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Saldoina.

    Zufallszahlen Generator

    Hallo,

    ich bin neu hier und auch neuling was das Programmiern angeht. Ich habe in meiner massnahme die ich zur zeit mache mit dem Buch "jetzt lerne ich Visual Basic 2010" zu tun. Und habe nun die Aufgabe bekommen einen Zufallszahlen Generator zu basteln. Ick weiss es gibt so viele schon im Netz... Allerding soll dieser etwas spezieller sein.

    Ich erkläre euch mal meine Aufgabenstellung.

    Ich soll in einer TB eine beliebige Zahl eingeben, die dann dafür steht wie oft der Zufallsgenerator durchlaufen soll. Zb: 100 mal eine zahl zwischen 1 und 10. Die Zahlen dürfen sich ruhig wiederholen. Anschliessend soll das ganze als chart dargestellt werden, wie oft zb die 1 oder die 3 vorgekommen sind.

    Ich habe mir recht fix anregungen aus dem Netz holen können (gibt ja genug Zufallszahlen Generatoren im Netz). Ich habe es auch hinbekommen das ich manuell zb 10 mal durch klicke und das dann in Zählern darstellen konnte. Als ich mich allerdings dann an eine schleife rantrauen wollte entstand ein problem. Das Programm hat nur die letzte zahl angzeigt in meinem Label wo ich die zufallszahlen anzeigen lasse. Ich hoffe das ich hier in dem unterforum richtig bin und das mir jmd helfen kann/mag.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. 'Label1.Text = zufallszahlen ausgabe
    3. 'Label2.Text = counter wieoft schon "gewürfelt" wurdeDim rnd As New System.Random()
    4. Do
    5. Label2.Text = Label2.Text + 1
    6. Label1.Text = rnd.Next(1, 11)
    7. Loop Until Label2.Text = TextBox1.Text

    MFg

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. 'Label1.Text = zufallszahlen ausgabe
    3. 'Label2.Text = counter wieoft schon "gewürfelt" wurdeDim rnd As New System.Random()
    4. Dim iCount as Int
    5. iCount = 0
    6. Do
    7. Label2.Text = iCount.ToString()
    8. Label1.Text = Label1.Text + rnd.Next(1, 11)
    9. iCount++
    10. Loop Until iCount.ToString() = TextBox1.Text


    So sollte es Funktionieren
    Du musst sagen das Label1 auch seinen bisherigen Text behält und den neu dazu genommen auch ist das geht eben mit Labe1.Text + rnd.Next(1, 11)
    @icemanns: Wohl kaum. => Option Strict On
    @Saldoina: Probier mal dies:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim Anzahl As Integer = Integer.Parse(TextBox1.Text)
    3. Dim Range As Integer = 10
    4. Dim chart(Range - 1) As Integer
    5. Dim val As Integer
    6. Randomize()
    7. For iCount As Integer = 1 To Anzahl
    8. val = CInt(Rnd() * (Range - 1))
    9. chart(val) += 1
    10. Label2.Text = iCount.ToString() ' das bringt nix, geht zu schnell
    11. Label1.Text = val.ToString ' das bringt nix, geht zu schnell
    12. Next
    13. ' hier das Feld chart verwenden
    14. End Sub
    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!

    Saldoina schrieb:

    Anschliessend soll das ganze als chart dargestellt werden, wie oft zb die 1 oder die 3 vorgekommen sind.

    genau so, wie Du es brauchst. Du kannst das Feld natürlich in Deiner Klasse deklarieren, da kannst Du besser drauf zugreifen.
    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!
    Wie gesagt bin noch recht neu und hab noch nichts mit charts gemacht leider.

    Eigendlich hatte ich es mir ja sogedacht das die Ergebnisse in Labels addiert werden zb die zahl eins kam 5x und das ich dann die labels 1-10 als referenz für die chart auswählen kann wie zb in excel.
    Dann leg Dir 10 Labels an und gib die Werte in den Labels aus:

    VB.NET-Quellcode

    1. Label1.Text = chart(0).ToString
    2. Label2.Text = chart(1).ToString

    usw.
    Du kannst, wenn Du nicht mehr so neu bist ( :thumbsup: ) die Werte direkt nach Excel übertragen, in eine Datei schreiben usw. usf.
    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!
    hmmm irgendwie kam ich damit nicht weiter... Aufjedenfall macht das programm nun das was es machen soll... hier mal der code..

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. 'Label1.Text = zufallszahlen ausgabe
    3. 'Label2.Text = counter wie oft schon "gewürfelt" wurde
    4. 'lb1 bis 10 = anzahl der treffer beim würfelnDim rnd As New System.Random()
    5. Do
    6. Label2.Text = Label2.Text + 1
    7. Label1.Text = rnd.Next(1, 11)
    8.  
    9. 'Nach Zähler übertragen
    10. If Label1.Text = "1" Then
    11. lb1.Text = (lb1.Text) + 1
    12. Else
    13. If Label1.Text = "2" Then
    14. lb2.Text = (lb2.Text) + 1
    15. Else
    16. If Label1.Text = "3" Then
    17. lb3.Text = (lb3.Text) + 1
    18. Else
    19. If Label1.Text = "4" Then
    20. lb4.Text = (lb4.Text) + 1
    21. Else
    22. If Label1.Text = "5" Then
    23. lb5.Text = (lb5.Text) + 1
    24. Else
    25. If Label1.Text = "6" Then
    26. lb6.Text = (lb6.Text) + 1
    27. Else
    28. If Label1.Text = "7" Then
    29. lb7.Text = (lb7.Text) + 1
    30. Else
    31. If Label1.Text = "8" Then
    32. lb8.Text = (lb8.Text) + 1
    33. Else
    34. If Label1.Text = "9" Then
    35. lb9.Text = (lb9.Text) + 1
    36. Else
    37. If Label1.Text = "10" Then
    38. lb10.Text = (lb10.Text) + 1
    39. Else : End If
    40. End If
    41. End If
    42. End If
    43. End If
    44. End If
    45. End If
    46. End If
    47. End If
    48. End IfLoop Until Label2.Text = TextBox1.Text
    49. End Sub


    Habe nun meine 10 Labels die mir Anzeigen wie oft welche Zahl gewürfelt wurden. Bleibt jetzt nur noch das prob mit der Chart.
    Hat vieleicht noch wer ne anregung wie ich diese 10fache if abfrage abkürzen könnte? Hab nen bissl in meinem Buch rumgewältzt und bin auf das thema Select Case gestossen. Das würde es aber auch nicht viel mehr abkürzen oder?
    Option Strict On
    Was soll das?

    VB.NET-Quellcode

    1. lb1.Text = (lb1.Text) + 1

    In

    VB.NET-Quellcode

    1. chart(i)

    steht das Ergebnis der Zählung!
    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!
    Naja damit hab ich dem program gesagt das wenn er ne 1 würfelt er im lb1 den wert von lb1 + 1 addieren soll. Da der wert von lb1 vordefniert 0 ist wird dann mit jeder gewürfelten 1 immer + 1 addiert. So das ich bei 10000 würfen ~ 1000x die eins bekomme. Und genau die ergebnisse aus den labels wollte ich dann in die chart initegrieren.

    VB.NET-Quellcode

    1. Label1.Text = chart(0).ToString
    2. Label2.Text = chart(1).ToString
    3. Label3.Text = chart(2).ToString
    4. Label4.Text = chart(3).ToString
    5. Label5.Text = chart(4).ToString
    6. Label6.Text = chart(5).ToString
    7. Label7.Text = chart(6).ToString
    8. Label8.Text = chart(7).ToString
    9. Label9.Text = chart(8).ToString
    10. Label10.Text = chart(9).ToString
    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!
    hmm... also wenn ich das in meine click prozedur des buttons eintrage bekomme ich nur die fehlermeldung das chart nicht deklariert wurde.

    Falls du mir da noch auf die sprünge helfen könntest?!

    Aufjedenfall schonmal dank für deine geduld mit mir
    Dann musst Du das Feld innerhalb der Klasse deklarieren.
    ==> Grundlagen studieren.
    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!
    Soo mal nen kleiner status update: hier mal der quellcode.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. 'Label1.Text = zufallszahlen ausgabe
    3. 'Label2.Text = counter wie oft schon "gewürfelt" wurde
    4. 'lb1 bis 10 = anzahl der treffer beim würfelnDim rnd As New System.Random()
    5.  
    6. Do
    7. Label2.Text = Label2.Text + 1
    8. Label1.Text = rnd.Next(1, 11)
    9. 'Nach Zähler übertragen
    10. If Label1.Text = "1" Then
    11. lb1.Text = (lb1.Text) + 1
    12. Else
    13. If Label1.Text = "2" Then
    14. lb2.Text = (lb2.Text) + 1
    15. Else
    16. If Label1.Text = "3" Then
    17. lb3.Text = (lb3.Text) + 1
    18. Else
    19. If Label1.Text = "4" Then
    20. lb4.Text = (lb4.Text) + 1
    21. Else
    22. If Label1.Text = "5" Then
    23. lb5.Text = (lb5.Text) + 1
    24. Else
    25. If Label1.Text = "6" Then
    26. lb6.Text = (lb6.Text) + 1
    27. Else
    28. If Label1.Text = "7" Then
    29. lb7.Text = (lb7.Text) + 1
    30. Else
    31. If Label1.Text = "8" Then
    32. lb8.Text = (lb8.Text) + 1
    33. Else
    34. If Label1.Text = "9" Then
    35. lb9.Text = (lb9.Text) + 1
    36. Else
    37. If Label1.Text = "10" Then
    38. lb10.Text = (lb10.Text) + 1
    39. Else : End If
    40. End If
    41. End If
    42. End If
    43. End If
    44. End If
    45. End If
    46. End If
    47. End If
    48. End IfLoop Until Label2.Text = TextBox1.Text
    49. Chart1.Series.Clear()
    50. Chart1.Legends("Legend1").Enabled = TrueChart1.Series.Add("Balken")
    51. Chart1.Series("Balken").ChartType = SeriesChartType.BarChart1.Series("Balken").Points.AddY(lb1.Text)
    52. Chart1.Series("Balken").Points.AddY(lb2.Text)Chart1.Series("Balken").Points.AddY(lb3.Text)
    53. Chart1.Series("Balken").Points.AddY(lb4.Text)Chart1.Series("Balken").Points.AddY(lb5.Text)
    54. Chart1.Series("Balken").Points.AddY(lb6.Text)Chart1.Series("Balken").Points.AddY(lb7.Text)
    55. Chart1.Series("Balken").Points.AddY(lb8.Text)Chart1.Series("Balken").Points.AddY(lb9.Text)
    56. Chart1.Series("Balken").Points.AddY(lb10.Text)End Sub

    Es funktioniert nun alles so wie ich es mir vorgestellt habe.