Infinite-Monkey-Theorem Tool Programmieren?

  • VB.NET

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

    Infinite-Monkey-Theorem Tool Programmieren?

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    3. Timer1.Start()
    4. Timer1.Enabled = True
    5. End Sub
    6. Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    7. Dim zeichenliste As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" 'Groß, Klein, und Zahlen 'For i = 0 To 61
    8. Dim zeichenlistegroß As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 'Groß 'For i = 0 To 25
    9. Dim zeichenlisteklein As String = "abcdefghijklmnopqrstuvwxyz" 'Klein For i = 0 To 25
    10. Dim zeichenlistezahlen As String = "0123456789" 'Zahlen For i = 0 To 9
    11. Dim zufall As New Random
    12. Dim zufallszeichen As String
    13. For i = 0 To 25
    14. zufallszeichen = zufall.Next(0, 25)
    15. RichTextBox1.Text = RichTextBox1.Text & zeichenlisteklein(zufallszeichen)
    16. RichTextBox1.AppendText(zufallszeichen)
    17. Label3.Text = RichTextBox1.TextLength
    18. Application.DoEvents()
    19. Next
    20. If RichTextBox1.Text = Textbox1.Text Then ' Hier steckt der zu Suchende String beispielsweise das Wort "Affe"
    21. Timer1.Stop()
    22. End If
    23. End Sub
    24. Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    25. RichTextBox1.Clear()
    26. End Sub
    27. End Class


    Hi, da ich gerade erst mit dem Programmieren anfange, wollte ich mal fragen wo die Fehler liegen, weil das Programm nicht das macht was es eigentlich soll.
    Ich habe beispielsweise alles auskommentiert bis auf zeichenlisteklein, trotzdem werden aber auch zahlen benutzt.

    Dann hab ich noch 2 Fragen, 1. Gibt es einen effizienteren, also schnelleren weg diese Zeichenketten zu generieren? Und 2. wie stelle ich es an das eine Bestimmte Zeichenfolge, beispielsweise das wort "affe" gefunden wird, der vorgang gestoppt wird?

    Ich denk mir mal das ich schon viele fehler gemacht habe beispielsweise der Timer, dieser dürfte die Geschwindigkeit des Programmes extrem limitieren, ich habe aber keine ahnung wie ich das sonst lösen soll :(

    Ich hoffe ich habe nix vergessen, und würde ich über Hilfe sehr freuen.

    Lg Keineahnung1234
    1. Option Strict On, da Dim zufallszeichen As String und zufallszeichen = zufall.Next(0, 25) nicht zusammenpassen
    2. einfacher: zeichenliste = zeichenlistegroß & zeichenlisteklein & zeichenlistezahlen
    3. warum For i = 0 To 25? Da muss doch statt 25 die TextBox1.Textlänge rein.
    4. entweder Zeile#18 oder Z#19
    5. Willst Du Dir den ganzen Affenschmus echt anzeigen lassen? Reicht es nicht, wenn das Ergebnis da ist? Die Anzahl der Versuche wäre nämlich m.E. viel interessanter.
    6. Zeile#21 kannst Du bei nem Timer weglassen
    7. Ich hab's mal nur mit der großen Zeichenliste und "AFFE" probiert. Hat ca. 38000 Versuche beim ersten Mal gebraucht. Beim 2. Mal hab ich nach 500000 keine Lust mehr gehabt. Viel Spaß bei Shakespeares "Romeo und Julia" ;)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke für deine Hilfe, aber ich bekomme es irgendwie nicht hin, der schreibt was von "Ungültige Konvertierung von der Zeichenfolge ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef in Typ Integer." Aber das ist doch garkein Integer, sondern ein String, mhh schade, ein versuch wars wert.

    Hab mal was anderes Probiert aber das Funktioniert überhaupt nicht, der Generiert zwar jetzt Buchstaben, und stoppt auch, aber nur wenns in einen Timer verbaut ist, und das ist ja relativ langsam oder?

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    4. If RichTextBox1.Text <> TextBox1.Text Then
    5. Application.DoEvents()
    6. Dim Gefunden As String = TextBox1.Text
    7. Dim zeichenliste As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" 'Groß, Klein, und Zahlen 'For i = 0 To 61
    8. Dim zeichenlistegroß As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 'Groß 'For i = 0 To 25
    9. Dim zeichenlisteklein As String = "abcdefghijklmnopqrstuvwxyz" 'Klein For i = 0 To 25
    10. Dim zeichenlistezahlen As String = "0123456789" 'Zahlen For i = 0 To 9
    11. Dim zufall As New Random
    12. Dim zufallszeichen As String
    13. Do
    14. RichTextBox1.Visible = False
    15. For i = 0 To TextBox1.TextLength
    16. Next
    17. zufallszeichen = CStr(zufall.Next(0, 25))
    18. RichTextBox1.Text = RichTextBox1.Text & zeichenlisteklein(CInt(zufallszeichen))
    19. Label3.Text = CStr(RichTextBox1.TextLength)
    20. Loop Until RichTextBox1.Text = TextBox1.Text
    21. Else
    22. End If
    23. If RichTextBox1.Text = TextBox1.Text Then ' Hier steckt der zu Suchende String beispielsweise das Wort "Affe"
    24. RichTextBox1.Visible = True
    25. Exit Sub
    26. End If
    27. End Sub
    28. End Class


    So funktioniert es jedenfalls nicht :( , weiß aber nicht wo der Fehler liegen könnte.

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

    @Keineahnung1234 Fange an und lerne, welche Datenbtypen es gibt, hier reichen zunächst Integer und String.
    Dein Kardinalfehler: Dim zufall As New Random wird bei jedem neuen Zeichen aufgerufen.
    Warum das falsch ist, bekommst Du bitte allein raus. Ich erwarte von Dir hier eine Antwort dazu.
    Pack alle Zeilen, die mit Dim anfangen, aus der Schleife in die Klasse, das frisst Zeit.
    Und:
    zufallszeichen ist ein String. Ihr weist Du eine in einen String konvertierte Zufallszahl zu.
    Eine Zeile später konvertierst Du diesen String in ein Integer. Klingelts :?:
    Sowie:
    In der Schleife wird bei jedem Umlauf ein Zeichen an den RichText angehängt.
    Dein Abbruch-Test lautet: Loop Until RichTextBox1.Text = TextBox1.Text. Was stimmt da 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!
    Ergänzend zu RfGs Post:

    Keineahnung1234 schrieb:

    "Ungültige Konvertierung von der Zeichenfolge ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef in Typ Integer."
    Wenn Du schon Fehlermeldungen wiedergibst, dann bitte auch, wo sie auftaucht, also welche Zeile. Solltest Du anderen als bisher gezeigten Code verwenden, der zum Fehler führt, dann bitte jenen Code posten.

    Keineahnung1234 schrieb:

    Aber das ist doch garkein Integer, sondern ein String
    Dann solltest Du wohl etwas an der Präzision bei der Vergabe von Variablennamen arbeiten, dann sollte klar werden, wo das Problem liegt.

    Keineahnung1234 schrieb:

    mhh schade, ein versuch wars wert.
    ist ein rotes Tuch, weil es klingt, also ob Du fertige Lösungen erwartest. Und wenn es nicht will, schmeißt Du das Gewehr in den Doppelkorn.

    Wenn Du Zeile#5 beibehältst, wozu dann Zeile#28?
    Zeile#30 ergibt auch keinen Sinn, da Es eh die letzte Prozeduranweisung ist.
    Und bezüglich Zeile#9-#12 hatte ich mich schon in Post#2, Punkt#2 geäußert.

    Und zum Schluß noch die Verlinkung zu RfGs Thread: Debuggen, Fehler finden und beseitigen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Ergänzend zu RfGs Post:
    ist ein rotes Tuch, weil es klingt, also ob Du fertige Lösungen erwartest. Und wenn es nicht will, schmeißt Du das Gewehr in den Doppelkorn.

    Wenn Du Zeile#5 beibehältst, wozu dann Zeile#28? ' Ich dachte das Programm arbeitet schneller, wenn ich die Richtextbox nicht dauerhaft anzeigen lassen muss.
    Zeile#30 ergibt auch keinen Sinn, da Es eh die letzte Prozeduranweisung ist. ' Ja die Zeile hatte ich vergessen zu löschen, da war vorher noch was anderes drin.

    Und zum Schluß noch die Verlinkung zu RfGs Thread: Debuggen, Fehler finden und beseitigen
    [/quote]

    Nein ich erwarte keine Fertige Lösung keine angst ;)
    Ok werde ich mir mal anschauen, vielen dank.

    Keineahnung1234 schrieb:

    Wenn Du Zeile#5 beibehältst, wozu dann Zeile#28? ' Ich dachte das Programm arbeitet schneller, wenn ich die Richtextbox nicht dauerhaft anzeigen lassen muss.
    Ja, das ist richtig, aber was hat das mit meiner Anmerkung zu tun?
    Zeile#5: If RichTextBox1.Text <> TextBox1.Text Then
    Z#28: If RichTextBox1.Text = TextBox1.Text Then
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:


    Zeile#5: If RichTextBox1.Text <> TextBox1.Text Then
    Z#28: If RichTextBox1.Text = TextBox1.Text Then


    Man bin ich doof, ja jetzt verstehe ich was du meinst. Ich glaube ich habs vermasselt, jetzt macht das Programm alles, nur nicht das was es soll. xD.

    Vielleicht komm ich ja noch drauf was der Fehler ist, falls nicht hab ich eben Pech gehabt ^^, danke für eure Tips, ich denk mal das kann hier geschlossen werden.

    Keineahnung1234 schrieb:

    Vielleicht komm ich ja noch drauf was der Fehler ist
    Lies mal in Post #4 nach und verstehe, was da steht.
    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!

    RodFromGermany schrieb:

    Keineahnung1234 schrieb:

    Vielleicht komm ich ja noch drauf was der Fehler ist
    Lies mal in Post #4 nach und verstehe, was da steht.

    Dein Kardinalfehler: Dim zufall As New Random wird bei jedem neuen Zeichen aufgerufen.

    Vielleicht hab ich ja irgendwo einen gewaltigen Denkfehler, aber warum musst man nicht bei jeder neuen Zahl welche Generiert wird Random neu aufrufen? Wie soll das sonst funktionieren? Das Programm weiß doch sonst garnicht was es machen soll oder? Ich denke mal ich sollte den Teil in eine Seperate Funktion einbauen oder?
    Innerhalb der Random Klasse ist ein Algorithmus der Pseudozufällige Zahlen anhand eines sog. Seedsoder auch Ursprung erstellt. Beim Initialisieren der Klasse wird dieser Seed festgelegt, und mit jedem Aufruf an Next() wird die nächste Zahl anhand des Algorithmus generiert.

    Warum nun also wiederholtes initialisieren der Random Klasse keine gute Idee ist, sollte nun klar sein.

    Keineahnung1234 schrieb:

    Ich denke mal ich sollte den Teil in eine Seperate Funktion einbauen oder?

    RodFromGermany schrieb:

    Pack alle Zeilen, die mit Dim anfangen, aus der Schleife in die Klasse, das frisst Zeit.
    Leseschwäche?
    Beratungsresistenz?
    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!

    RodFromGermany schrieb:



    Pack alle Zeilen, die mit Dim anfangen, aus der Schleife in die Klasse, das frisst Zeit.
    Hab ich gemacht.

    zufallszeichen ist ein String. Ihr weist Du eine in einen String konvertierte Zufallszahl zu.
    Eine Zeile später konvertierst Du diesen String in ein Integer. Klingelts :?:

    Das mache ich ja nicht mit Absicht, Visualbasic lässt nix anderes zu, ist mir schon irgendwie klar oder wohl eher nicht, dass das normal ein String bleiben muss.

    Sowie:
    In der Schleife wird bei jedem Umlauf ein Zeichen an den RichText angehängt.
    Dein Abbruch-Test lautet: Loop Until RichTextBox1.Text = TextBox1.Text. Was stimmt da nicht?


    Ich denk mir mal, wenn das Programm läuft, falls es denn mal läuft, schreibt es ja Zufallsbasierend immer mehr Buchstaben hintereinander, und mit meinem Befehl sucht er nach dem Kompletten Text welcher in der RichTextbox1.Text steht was er natürlich nicht finden kann, aber ich habe aktuell noch keine ahnung wie ich einzelne Abschnitte aus einem Text rauspicken kann.

    Beispiel: aksfjgaklfjgsdfljgsdlfkjgdflgjkklaffe

    Jetzt würde das Programm Stoppen und das Wort Affe meinetwegen farblich hervorheben.

    Mir ist das alles denk ich mal irgendwie zu Hoch

    Es gibt so viele schöne Farben hier im Editor. Rot ist jedoch für die Moderation vorgesehen. Bitte künftig drauf achten. Editiert. ~fufu

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

    @Keineahnung1234 Vielleicht hilft es, wenn Du Dir mal die Methoden der Klasse String ansiehst.
    Da fällt mir .EndsWith() auf:

    VB.NET-Quellcode

    1. Loop Until RichTextBox1.Text.EndsWith(TextBox1.Text)
    Und ich würde da ggf. ein ToLower() reinbauen, den "AfFe" würde er nicht finden.
    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!