Schleifendurchlauf Zählen

  • Hallo,
    gibt es eine einfache Möglichkeit ein Skript zählen zu lassen wie oft eine Schleife durchlaufen wurde??
    Die Schleife wiederholt sich so lange, bis eine bestimmte Bedingung erfüllt ist. Kann man eine Variable erstellen, die sich jede Runde um 1 erhöht??
    Das geht bestimmt, aber ich komm einfach nicht drauf...
    Ich hoffe es kann mir jemand helfen :huh:

    Einmal editiert, zuletzt von FojhtirfX (1. Mai 2009 um 20:18)

  • Klar. Wenn du die Schleife normal so hast:

    [autoit]

    While $abc <> 5
    ...
    WEnd

    [/autoit]

    Machst du sie einfach so:

    [autoit]

    $amount =0
    While $abc <>5
    ...
    $amount = $amount + 1
    WEnd

    [/autoit]
  • Klappt super, so ähnlich hatte ichs auch schon probiert, nur hatte ich das $amount = 0 mit in die Schleife gepackt, dann ging es nicht, weil der das immer wieder auf 0 setzt.

  • Ich brauchte das für ein kleines Brute-Force-Testprogramm, um zu testen, wieviele Versuch mein PC braucht, um eine 6stellige Zahlenkombination zu knacken.

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.0.0
    Author: myName

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Template AutoIt script.

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ; Script Start - Add your code below here

    [/autoit] [autoit][/autoit] [autoit]

    Global $richtig1 = 1
    Global $richtig2 = 3
    Global $richtig3 = 5
    Global $richtig4 = 8
    Global $richtig5 = 8
    Global $richtig6 = 1
    Global $richtig7 = 8
    Global $richtig8 = 3
    Global $richtig9 = 9
    $zaehler = 1
    While 1

    [/autoit] [autoit][/autoit] [autoit]

    $zahl1 = random(1,9,1)
    $zahl2 = random(1,9,1)
    $zahl3 = random(1,9,1)
    $zahl4 = random(1,9,1)
    $zahl5 = random(1,9,1)
    $zahl6 = random(1,9,1)
    $zahl7 = random(1,9,1)
    $zahl8 = random(1,9,1)
    $zahl9 = random(1,9,1)
    $zaehler = $zaehler + 1
    If $zahl1 = $richtig1 and $zahl2 = $richtig2 and $zahl3 = $richtig3 and $zahl4 = $richtig4 and $zahl5 =$richtig5 and $zahl6 =$richtig6 Then
    MsgBox(0,"Toll", $zahl1 & $zahl2 & $zahl3 & $zahl4 & $zahl5 & $zahl6)
    MsgBox(0,"Toll", $zaehler)
    Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
  • Lol. Du musst zu Anfang den Zähler auf 0 setzen, sonst hast du immer einen zu viel ;)

  • Ich weiß, aber das ist mir bei ein paar Hunderttausend eigentlich egal ;) ;)

  • Wenn ich Dein Script richtig interpretiere, prüft es Zahlenkombinationen aber unter Umständen doppelt !

    "Random" erzeugt ja nun Zufallszahlen und die ggf. dann auch doppelt. Wenn es dumm kommt, trifft dein
    Script NIE die richtige Kombination, obwohl es von der Anzahl her, alle Zahlen probiert hat.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Ja, das ist aber sehr unwahrscheinlich und bis jetzt noch nicht vorgekommen

  • das ist nicht sehr unwahrscheinlich, bei Random kommt jede Zahl wenn die Anzahl nach n geht gleichoft vor

  • das ist nicht sehr unwahrscheinlich, bei Random kommt jede Zahl wenn die Anzahl nach n geht gleichoft vor


    Kann schon sein, dass du Recht hast, aber bis jetzt hat es immer funktioniert. Es sollte eh nur Testzwecken dienen.
    Dankle an alle für die Hilfe.

  • Wenn würde ich das so machen:

    Spoiler anzeigen
    [autoit]


    Global $richtig1 = 135881839
    $zaehler = 0
    While 1

    [/autoit] [autoit][/autoit] [autoit]

    $zahl1 = random(000000000,999999999,1)

    [/autoit] [autoit][/autoit] [autoit]

    $zaehler = $zaehler + 1
    If $zahl1 = $richtig1 Then
    MsgBox(0,"Toll", $zahl1)
    else
    MsgBox(0,"Toll", $zaehler)
    Exit
    EndIf
    WEnd

    [/autoit]

    Ansonsten hast Du eine Chance von 1 : 3.480.000.000 und wie lange willst Du da hoffen das die Zahl die Du suchst kommt? Besonders Random wiederholt auch Zahlen. Hast Du das mitberechnet? Brute-Force-Testprogramm? Dann fang bei 0 an und zähle immer um eines hoch bis die Zahl überein stimmt, das sollte besser gehen, wobei es auch sehr lange dauern wird. Wenn Du nur wissen möchtest wie lange es cirka dauert so rechne: Eine Zahl vergleichen benötigt x-Sec, dann benötigen 3.480.000.000 Zahlen x * 3.480.000.000 durchläufe.

    Ansonsten jeden Random in eine Textdatei (kann die gleiche sein) schreiben und dann später wieder zu einer Zahl verbinden. Aber wo da der Sinn ist weiß ich nicht.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    • Offizieller Beitrag

    Hallo

    Wenn dann richtig, dann richtig richtig!

    Spoiler anzeigen
    [autoit]

    Global $sString = "|", $iSol = 415335, $iCount
    While 1
    $iRand = Random(0,999999,1)
    If Not StringInStr($sString,"|"&$iRand&"|") Then
    $iCount += 1
    $sString = $iRand&"|"
    EndIf
    If $iRand = $iSol Then ExitLoop
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,"","Er braucht: "&$iCount&" Versuche")

    [/autoit]

    Mfg Spider

  • Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.0.0
    Author: myName

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Template AutoIt script.

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ; Script Start - Add your code below here

    [/autoit] [autoit][/autoit] [autoit]

    $zahl = 123456
    $zaehler = 1
    $zahl1 = 000000
    While 1
    If $zahl1 = $zahl Then
    MsgBox(0,"Toll", $zaehler)
    Exit
    Else
    $zahl1 += 1
    $zaehler = $zaehler + 1
    EndIf
    WEnd

    [/autoit]

    mfg. Jam00

    • Offizieller Beitrag

    Die Random-Methode kann schon schneller sein, als ein reines durchzählen, aber man muss die bereits verglichenen Zahlen ausschliessen.
    Und das geht am besten mit einem Array:

    [autoit]


    $iSecret = 415335

    [/autoit][autoit][/autoit][autoit]

    Global $aBrute[1000000]
    ToolTip('Bitte warten...', @DesktopWidth/2-100, 0)
    For $i = 0 To 999999
    $aBrute[$i] = $i
    Next
    ToolTip('Suche Zahl...', @DesktopWidth/2-100, 0)
    For $i = 0 To 999999
    ;~ If $i/10 = Int($i/10) Then ToolTip($i, @DesktopWidth/2-100, 0)
    $iRan = Random(0, 999999-$i, 1)
    If $aBrute[$iRan] = $iSecret Then
    MsgBox(0, 'Gefunden', 'geheime Zahl gefunden nach ' & $i & ' Versuchen.')
    Exit
    EndIf
    $aBrute[$iRan] = $aBrute[999999-$i]
    Next

    [/autoit]