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
Schleifendurchlauf Zählen
-
- [ gelöst ]
-
FojhtirfX -
1. Mai 2009 um 19:03 -
Geschlossen -
Erledigt
-
-
- Offizieller Beitrag
So:
[autoit]
[/autoit]
$iCount = 0
While True
$iCount += 1
WEndoder so:
[autoit]
[/autoit]
$iCount = 0
Do
$iCount += 1
Until $iCount = 100
MsgBox(0,0,$iCount) -
Klar. Wenn du die Schleife normal so hast:
[autoit]While $abc <> 5
[/autoit]
...
WEndMachst du sie einfach so:
[autoit]$amount =0
[/autoit]
While $abc <>5
...
$amount = $amount + 1
WEnd -
Dankeschön...das geht ja immer schön flott hier
-
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
[/autoit] [autoit][/autoit] [autoit]
Author: myNameScript Function:
[/autoit] [autoit][/autoit] [autoit]
Template AutoIt script.#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]; Script Start - Add your code below here
[/autoit] [autoit][/autoit] [autoit]Global $richtig1 = 1
[/autoit] [autoit][/autoit] [autoit]
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$zahl1 = random(1,9,1)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$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)
ExitEndIf
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
WEnd -
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. -
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]
[/autoit] [autoit][/autoit] [autoit]
Global $richtig1 = 135881839
$zaehler = 0
While 1$zahl1 = random(000000000,999999999,1)
[/autoit] [autoit][/autoit] [autoit]$zaehler = $zaehler + 1
[/autoit]
If $zahl1 = $richtig1 Then
MsgBox(0,"Toll", $zahl1)
else
MsgBox(0,"Toll", $zaehler)
Exit
EndIf
WEndAnsonsten 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.
-
- Offizieller Beitrag
Hallo
Wenn dann richtig, dann richtig richtig!
Spoiler anzeigen
[autoit]Global $sString = "|", $iSol = 415335, $iCount
[/autoit] [autoit][/autoit] [autoit]
While 1
$iRand = Random(0,999999,1)
If Not StringInStr($sString,"|"&$iRand&"|") Then
$iCount += 1
$sString = $iRand&"|"
EndIf
If $iRand = $iSol Then ExitLoop
WEndMsgBox(0,"","Er braucht: "&$iCount&" Versuche")
[/autoit]Mfg Spider
-
Spoiler anzeigen
[autoit]#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.3.0.0
[/autoit] [autoit][/autoit] [autoit]
Author: myNameScript Function:
[/autoit] [autoit][/autoit] [autoit]
Template AutoIt script.#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]; Script Start - Add your code below here
[/autoit] [autoit][/autoit] [autoit]$zahl = 123456
[/autoit]
$zaehler = 1
$zahl1 = 000000
While 1
If $zahl1 = $zahl Then
MsgBox(0,"Toll", $zaehler)
Exit
Else
$zahl1 += 1
$zaehler = $zaehler + 1
EndIf
WEnd -
- Offizieller Beitrag
Hallo
Jam00: Dann hat es ja aber nichts mehr mit Zufall zutun. Um so kleiner die Zahl zum Lösen ist um so weniger versuche braucht er (um genau zu sein, gleich viele ;))
Mfg Spider
-
- Offizieller Beitrag
Die Random-Methode kann schon schneller sein, als ein reines durchzählen, aber man muss die bereits verglichenen Zahlen ausschliessen.
[autoit]
Und das geht am besten mit einem Array:
[/autoit][autoit][/autoit][autoit]
$iSecret = 415335Global $aBrute[1000000]
[/autoit]
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 -
Es kann schneller gehen, aber auch langsamer^^
-
- Offizieller Beitrag
Das reine durchzählen ist aber keine besonders gute Strategie und verliert so gut wie immer, wenn die Geheimzahl im letzten Viertel der möglichen Zahlen liegt.
-
- Offizieller Beitrag
Hallo
Oscar : Genau das hab ich doch schon gemacht Siehe HIER
Hab auch erst an ein Array gedacht, dauert aber zulange und ist nicht Optimal dafür. String ist dafür besser gedacht.Mfg Spider
-