Geschwindigkeit?

  • Hallo ich habe mich heute mal hingesetzt unt einen Gleichungsrechner mit viel schnick-schnack zusammengecoded, doch wenn er startet dauert das schon ewig und 40mb groß ist er auch. Nu wollt ich fragen ob man die Geschwindigkeit etwas erhöhen kann durch andere Kommandos oder weis der Geier was auch immer :D

    Hier mal der Code bin noch neuling daher nicht der Aufgeräumteste ^^
    Edit: Script verändert Schnickschnack entfernt. :thumbup:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <String.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <GuiListBox.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1_2 = GUICreate("Gleichungsrechner v0.24", 792, 721, 202, 130)
    $Button1 = GUICtrlCreateButton("Start", 520, 600, 163, 57)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Label1 = GUICtrlCreateLabel("Die Gleichung", 376, 560, 84, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Input1 = GUICtrlCreateInput("", 464, 560, 265, 21)
    $Label2 = GUICtrlCreateLabel("Dein Anneherungswert", 376, 16, 132, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Input2 = GUICtrlCreateInput("", 512, 16, 217, 21)
    $Label3 = GUICtrlCreateLabel("Rechnungen: 0", 8, 696, 126, 24)
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
    $ListView1 = GUICtrlCreateListView("Gleichung |Lösung ", 0, 0, 370, 692)
    $ListView1_0 = GUICtrlCreateListViewItem("Gleichung |Lösung ", $ListView1)
    $Button2 = GUICtrlCreateButton("Clear", 376, 688, 75, 25)
    $Button3 = GUICtrlCreateButton("Help", 456, 688, 75, 25)
    $Button4 = GUICtrlCreateButton("Ergebnisse Speichern", 536, 688, 131, 25)
    $Label5 = GUICtrlCreateLabel("Eine Gleichung wie etwa x+8=4*4", 464, 584, 194, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Label6 = GUICtrlCreateLabel("Der Anneherungswer ist erst sinnvoll zu benutzen wenn deine Gleichung", 376, 80, 414, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Label7 = GUICtrlCreateLabel("Werte oder ein Ergebniss mit mehr als 8 Nachkommastellen hat.", 376, 96, 365, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Label8 = GUICtrlCreateLabel("Als Anneherungswert eignen sich alle Zahlen die kleiner als 1 sind", 376, 112, 380, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Label9 = GUICtrlCreateLabel("Aberauch bei Zahlen die größer als 1 sind sollte es keinen Fehler gben", 376, 128, 405, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $zahl = 0

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Button4
    $pfad = FileSaveDialog("Speichern unter...", @UserProfileDir, "Testdatein (*.txt)")
    $ListViewLines = _GUICtrlListView_GetItemCount($ListView1) - 1
    $File = FileOpen($pfad & ".txt", 2)
    For $i = 0 To $ListViewLines
    $ListViewZeile = _GUICtrlListView_GetItemTextString($ListView1, $i)
    FileWriteLine($pfad & ".txt", $ListViewZeile)
    Next
    FileClose($pfad & ".txt")
    WinSetState("Gleichungsrechner", "", @SW_RESTORE)
    Case $Button2
    _GUICtrlListView_DeleteAllItems($ListView1)
    Case $Button1
    gogo()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button3
    MsgBox(0, "Help", "Beachte das du Kommas als Punkt (.) schreibst!")
    EndSwitch
    WEnd

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

    Func gogo()
    $expression1 = GUICtrlRead($Input1)
    $expression = GUICtrlRead($Input1)
    $x_guess = GUICtrlRead($Input2)

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

    Local $expression

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

    $expression = "&" & $expression & "&"
    $right_side = _StringBetween($expression, "=", "&")
    $left_side = _StringBetween($expression, "&", "=")
    $expression = $left_side[0] & " - (" & $right_side[0] & ")"

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

    Local $x_guesses_array[2]
    $c = 0

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

    While 1
    $x_guess = $x_guess - (_Fx($expression, $x_guess) / _SlopeOfTangent($expression, $x_guess))
    $c += 1
    If IsInt($c / 1000) = 1 And IsInt($c / 2000) = 0 Then
    $x_guesses_array[0] = $x_guess
    $x_guesses_array[1] = 0
    EndIf
    If IsInt($c / 2000) Then
    $x_guesses_array[1] = $x_guess
    If Abs($x_guesses_array[1] - $x_guesses_array[0]) < 0.001 Then ExitLoop
    EndIf
    If $c >= 10000 Then
    MsgBox(0, "Ergebniss", "Leider konnte deine Formel nicht errechnet werden.")
    ExitLoop
    EndIf
    WEnd

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

    GUICtrlCreateListViewItem($expression1 & " |" & Round($x_guess, 4), $ListView1)
    $zahl = $zahl + 1
    GUICtrlSetData($Label3, "Rechnungen: " & $zahl)

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

    EndFunc ;==>gogo
    Func Terminate()
    Exit
    EndFunc ;==>Terminate

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

    Func _SlopeOfTangent($expr, $at_point, $var = "x", $places = 4)
    Local $dx = 0.00000001
    Local $x = $at_point
    Local $y = $x + $dx
    Local $slope = Execute(StringReplace($expr, $var, "$y")) - Execute(StringReplace($expr, $var, "$x"))
    Return Round($slope / $dx, $places)
    EndFunc ;==>_SlopeOfTangent

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

    Func _Fx($expr, $at_point)
    Return Execute(StringReplace($expr, "x", "$at_point"))
    EndFunc ;==>_Fx

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

    Einmal editiert, zuletzt von Sortoc (13. Januar 2010 um 15:10)

  • 40Mb groß!? Das klingt wirklich ein bisschen Utopisch. Ich glaube, ich habe noch kein Script über 4Mb geschatt.

    Hast du irgendwelche FileInstall sachen?

    Ja hast du. Mach doch einfach aus der wav eine mp3. Das dürfte das problem beheben. so ne riesen wav zu entpacken ist natürlich zeitaufwendig.

  • Hallo Sortoc,

    die Gui ist bei mir ruckzuck aufgebaut, wenn ich danah allerdings Start drücke steigt das Skript mit folgender Fehlermeldung aus:

    aus,

    mfg (Auto)Bert

  • autoBert: Wie der Fehler schon sag, gibt _StringBetween in Zeile 98 kein Array zurück. Ich weiß nicht was du in das InputFeld "Die Gleichung" eingeben hast, aber mit z.B.: "x^1=2" klappt es.

    @TP: Wie bei AutoBert ist bei mir die Gui auch sofort da.

    Eine Frage stellt sich mir allerdings, wenn ich den Button "Musik an" sehe: Warum in einem Gleichungsrechner Musik? 8) Dadurch wird das Script doch ewig groß und einen Player hat denke ich jeder auch so auf dem Pc ^^

    Ein Tipp noch: Du solltest später deutlich erklären wie die Eingabe einer Gleichung erfolgen und wie diese geschrieben werden soll.

  • Hallo @Jautois,

    autoBert: Wie der Fehler schon sag, gibt _StringBetween in Zeile 98 kein Array zurück. Ich weiß nicht was du in das InputFeld "Die Gleichung" eingeben hast, aber mit z.B.: "x^1=2" klappt es.


    Die Labels sind bei mir nicht lesbar (zumindest ohne Bild), ich hatte ohne eine Einabe gestartet. Die Fehlermeldung habe ich nich weiter analysiert.
    @ Sortoc: Ohne Erklärung der zulässigen Eingaben, habe ich später aber keine Gleichungen lösen können z.B.: 2*x² = 8 ergibt keine Lösung, also eine Erklärung ist da schon noch nötig,

    mfg (Auto)Bert

  • Also wegen der wav in eine mp3 umwandeln hab es schon mit einer mp3 versucht aber da startet das lied nicht und wegen der größe werde nochmal eine Version ohne schnickschnack machen.Aber erstmal danke für die antworten :D