Ich find die Fehler im Code nicht

  • Entschuldigung aber ich steh' gerade ein bisschen auf'm Schlauch.

    Ich wollte mal fragen warum mein Script immer eine Fehler Meldung ausgibt, ich hab das schon oft duch geschaut aber find meinen Fehler nicht. ?(

    [autoit]


    $o=200
    $s=2
    $file=FileOpen("Prim.txt", 1)

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

    for $i=2 to $o step 1

    for $r=2 to $s
    $e= $i/$r

    if IsFloat($e) =0 Then
    ExitLoop
    EndIf


    If $r=$s and IsFloat($e)= 1 Then
    FileWrite($file, $i&@CRLF)
    ExitLoop
    EndIf

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

    Next

    Next
    FileClose($file)

    [/autoit]

    Kann es sein das er mit den verschachtelten Befehlen nicht zurecht kommt?

    €: Es werden mehrere Fehler ausgegeben, weil ihm ein EndIf fehlt oder ein Next.

    Mfg
    monkey

    Monkey - die finale Potenz von göttlich!
    Sloganizer

    2 Mal editiert, zuletzt von monkey (21. November 2007 um 23:25)

    • Offizieller Beitrag
    Zitat

    warum mein Script immer eine Fehler Meldung ausgibt

    solltest du dich nicht beim Schreiben dieser Worte fragen, ob du uns nicht mitteilen willst, welche?

    An Verschachtelung liegt es sicher nicht, da ist AutoIt stabil. Was du aber wohl nicht machen solltest, ist immer wieder FileOpen, FileClose in einer Schleife (Performance).

    peethebee

  • Das liegt doch wohl eher daran, dass das Next, das die 2. For-Schleife beenden sollte, in einer If-Then-Abfrage innerhalb der Schleife selbst liegt. Damit fliegt das Schachteltürmchen mal ordentlich durcheinander, da hier mal ein EndIf fehlt, dann ist das Next nicht zugeordnet usw. Verschachtelung ist mit AutoIt schon drin, die Schachteln ineinander knüllen eher nicht.

    2 Mal editiert, zuletzt von unearth (21. November 2007 um 18:42)

  • Du hast insgesamt zwei for-Schleifen gestartet, aber es stehen drei next in deinem Code.
    Ich habe das jetzt mal so gedeutet:

    Spoiler anzeigen
    [autoit]

    $o=100
    $s=$o/2
    for $i=2 to $o step 1

    for $r=2 to $s
    $e= $i/$r

    If $r=$s and IsFloat($e)= 1 Then
    $file=FileOpen("Prim.txt", 1)
    FileWrite($file, $e&@CRLF)
    FileClose($file)
    EndIf


    if IsFloat($e)= 0 then

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

    EndIf
    Next

    Next

    [/autoit]
  • Ich habe es mal so interpretiert (ungetestet):

    [autoit]

    $o=100
    $s=$o/2

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

    $file=FileOpen("Prim.txt", 1)

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

    for $i=2 to $o step 1
    for $r=2 to $s
    $e= $i/$r
    if IsFloat($e) then
    If $r=$s FileWrite($file, $e & @CRLF)
    ExitLoop
    EndIf
    Next
    Next

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

    FileClose($file)

    [/autoit]

    Einmal editiert, zuletzt von Buffo (21. November 2007 um 18:58)

  • Ich glaub ich hab da en paar ganz dicke Denkfehler drin.
    Das Script soll eigentlich Prim zahlen berechnen, tut es aber nich.
    Irgendwo muss ich da noch en paar Fehler drin haben.

    Mfg
    monkey

    Monkey - die finale Potenz von göttlich!
    Sloganizer

  • Ich habe es jetzt so geschrieben aber, er listet nich alle Primzahöen auf erst ab 53. Jetzt frage ich mich warum er die davor nich aufschreibt.

    [autoit]

    $o=100
    $s=$o/2
    $file=FileOpen("Prim.txt", 1)

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

    for $i=2 to $o step 1

    for $r=2 to $s
    $e= $i/$r

    if IsFloat($e) =0 Then
    ExitLoop
    EndIf


    If $r=$s and IsFloat($e)= 1 Then
    FileWrite($file, $i&@CRLF)
    ExitLoop
    EndIf

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

    Next

    Next
    FileClose($file)

    [/autoit]

    €: Es ist immer die erstehälte der Zahl $o die fehlt wenn man 200 als $o definiert werden primzahlen zwischen 100 und 200 errechnet

    €²: ..... zu früh gefreut -.-

    Mfg
    monkey

    Monkey - die finale Potenz von göttlich!
    Sloganizer

    4 Mal editiert, zuletzt von monkey (21. November 2007 um 23:32)

    • Offizieller Beitrag

    Hallo,

    eine der schnellsten Methoden zum Primzahlenberechnen ist wohl diese:

    [autoit]


    $o=1000

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

    $file=FileOpen("Prim.txt", 2)

    for $i=2 to $o step 1
    If IsPrime($i) Then FileWrite($file, $i & @CRLF)
    Next
    FileClose($file)

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

    Func IsPrime ($iValue)
    $maxText = Sqrt($iValue)

    For $i = 2 To $maxText
    If Mod($iValue, $i) = 0 Then Return False
    Next

    Return True
    EndFunc

    [/autoit]
  • ||

    Das selbe in Grün:

    Spoiler anzeigen
    [autoit]


    $o=100
    $isPrim=1
    $file=FileOpen(@ScriptDir&"\Prim.txt", 2)
    for $i=1 to $o step 1
    for $r=2 to Int($i/2) Step 1
    if IsFloat($i/$r)=0 Then $isPrim=0
    Next
    If $isPrim=1 Then
    FileWrite($file, $i&@CRLF)
    Else
    $isPrim=1
    EndIf
    Next
    FileClose($file)

    [/autoit]

    Mit Funktion kapseln is natürlich flexibler.

    monkey
    Dein Haupt Problem bestand in dieser Bedingung:

    [autoit]


    If $r=$s then ...

    [/autoit]

    Denn erst wenn die innere Schleife beim letzten Element ist und die Division eine Gleitpunktzahl ist, schreibst du den Wert und gehst danach noch unnötiger weise aus der Schleife, obwohl diese bereits beim letzten Element ist.

    ||

    Einmal editiert, zuletzt von zio82draw (22. November 2007 um 11:28)