fortschrittsbalen bei Berechnung

  • Hallo Leute,
    mein Progamm hier soll Pi über die Monte-Carlo-Methode herausbringen, bei größeren Zahlen dauert es sehr lange, deshalb hätte ich gerne einen Fortschrittsbalken, das hier ist mein kläglicher Versuch:

    [autoit]


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

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

    AutoIt Version: 3.2.10.0
    Author: Roman Leuprecht

    [/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]

    Opt("TrayMenuMode", 1)

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

    autoItSetOption("Mustdeclarevars",1) ;Alle Variablen müssen deklariert werden

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

    dim $versuche ;Hier werden die Variablen deklariert, zur Übersicht alle einzeln und in der richtigen Reihenfolge
    dim $zaehler
    dim $punktnummer
    dim $x
    dim $y
    dim $e
    dim $anteil
    dim $annaeherung
    dim $Hauptfenster
    dim $Label1
    dim $Anweisung
    dim $CR_me
    dim $CR_Pi
    dim $Input_versuchsanzahl
    dim $button_berechnen
    dim $nMsg
    dim $schliessen
    dim $Fortschrittsbalken
    dim $fortschritt_prozent
    $zaehler=0 ;Vorsichtshalber wird der Zähler auf NULL gesetzt

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

    #include <GUIConstants.au3>
    #include <misc.au3>

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

    #Region ### START Koda GUI section ### Form=c:\dokumente und einstellungen\leuprecht martin
    $Hauptfenster = GUICreate("Phi Näherungswert-Berechnung by Roman Leuprecht", 633, 447, 193, 125)
    GUISetFont(12, 400, 0, "Calibri")
    GUISetBkColor(0xFFFFFF)
    $Label1 = GUICtrlCreateLabel("Näherungswert-Berechnung für Pi mit dem Monte-Carlo-Verfahren", 24, 48, 571, 30)
    GUICtrlSetFont(-1, 16, 400, 0, "Calibri")
    $Anweisung = GUICtrlCreateLabel("Geben sie hier die Anzahl der zu tätigenden Versuche an:", 16, 136, 374, 23)
    $CR_me = GUICtrlCreateLabel("Copyright Roman Leuprecht", 72, 376, 183, 23)
    $Input_versuchsanzahl = GUICtrlCreateInput("Versuchsanzahl", 400, 136, 145, 27)
    GUICtrlSetCursor (-1, 5)
    $button_berechnen = GUICtrlCreateButton("Näherungswert berechnen", 200, 192, 233, 81, 0)
    GUICtrlSetCursor (-1, 0)
    $schliessen = GUICtrlCreateButton("Fenster schließen", 368, 368, 161, 33, 0)
    GUICtrlSetCursor (-1, 2)
    $Fortschrittsbalken = GUICtrlCreateProgress(24, 304, 569, 41)
    GUICtrlSetCursor (-1, 7)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button_berechnen

    $versuche=guictrlread($Input_versuchsanzahl)


    Do
    $x=Random() ;Die Zufallskoordinate X wird generiert
    $y=Random() ;Die Zufallskoordinate Y wird generiert
    $e=Sqrt($x^2+$y^2)

    If($e<=1)then $zaehler=$zaehler+1 ;Prüfung ob in Kreis oder nicht
    $punktnummer=$punktnummer+1 ;Punktnummer wird erhöht

    $fortschritt_prozent=$punktnummer/$versuche
    GUICtrlSetData( $Fortschrittsbalken, $fortschritt_prozent)


    Until $punktnummer=$versuche ;Bedingung, wann Schluss ist(wenn die Punktnummer so hoch ist wie die Versuchsanzahl)

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

    $anteil=$zaehler/$versuche ;Die relative Häufigkeit, ob ein Punkt im Kreis landet oder nicht, wird berechnet
    $annaeherung=4*$anteil ;die rel. Häufigkeit wird mit 4 multipliziert, um den ungefähren Wert für Phi zu erlangen

    MsgBox(0+48,"Annäherungswert Phi",$annaeherung) ;Nun noch die Ausgabe in einem Info-Fenster
    ContinueLoop(1)

    Case $schliessen
    Exit

    EndSwitch

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

    WEnd

    [/autoit]


    Wäre nett, wenn jemand mir zeigen könnte, wie das geht.
    Danke

    Leupy

    • Offizieller Beitrag

    Hallo

    Die Formel lautet immer

    Code
    100 * $iMomentan / $iInsgesamt

    Also so:

    Spoiler anzeigen
    [autoit]

    Opt("TrayMenuMode", 1)

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

    AutoItSetOption("Mustdeclarevars", 1) ;Alle Variablen müssen deklariert werden

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

    Dim $versuche ;Hier werden die Variablen deklariert, zur Übersicht alle einzeln und in der richtigen Reihenfolge
    Dim $zaehler
    Dim $punktnummer
    Dim $x
    Dim $y
    Dim $e
    Dim $anteil
    Dim $annaeherung
    Dim $Hauptfenster
    Dim $Label1
    Dim $Anweisung
    Dim $CR_me
    Dim $CR_Pi
    Dim $Input_versuchsanzahl
    Dim $button_berechnen
    Dim $nMsg
    Dim $schliessen
    Dim $Fortschrittsbalken
    Dim $fortschritt_prozent
    $zaehler = 0 ;Vorsichtshalber wird der Zähler auf NULL gesetzt

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

    #include <GUIConstants.au3>
    #include <misc.au3>

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

    #Region ### START Koda GUI section ### Form=c:\dokumente und einstellungen\leuprecht martin
    $Hauptfenster = GUICreate("Phi Näherungswert-Berechnung by Roman Leuprecht", 633, 447, 193, 125)
    GUISetFont(12, 400, 0, "Calibri")
    GUISetBkColor(0xFFFFFF)
    $Label1 = GUICtrlCreateLabel("Näherungswert-Berechnung für Pi mit dem Monte-Carlo-Verfahren", 24, 48, 571, 30)
    GUICtrlSetFont(-1, 16, 400, 0, "Calibri")
    $Anweisung = GUICtrlCreateLabel("Geben sie hier die Anzahl der zu tätigenden Versuche an:", 16, 136, 374, 23)
    $CR_me = GUICtrlCreateLabel("Copyright Roman Leuprecht", 72, 376, 183, 23)
    $Input_versuchsanzahl = GUICtrlCreateInput("Versuchsanzahl", 400, 136, 145, 27)
    GUICtrlSetCursor(-1, 5)
    $button_berechnen = GUICtrlCreateButton("Näherungswert berechnen", 200, 192, 233, 81, 0)
    GUICtrlSetCursor(-1, 0)
    $schliessen = GUICtrlCreateButton("Fenster schließen", 368, 368, 161, 33, 0)
    GUICtrlSetCursor(-1, 2)
    $Fortschrittsbalken = GUICtrlCreateProgress(24, 304, 569, 41)
    GUICtrlSetCursor(-1, 7)
    GUISetState(@SW_SHOW)
    #EndRegion ### START Koda GUI section ### Form=c:\dokumente und einstellungen\leuprecht martin

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button_berechnen

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

    $versuche = GUICtrlRead($Input_versuchsanzahl)

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

    Do
    $x = Random() ;Die Zufallskoordinate X wird generiert
    $y = Random() ;Die Zufallskoordinate Y wird generiert
    $e = Sqrt($x ^ 2 + $y ^ 2)

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

    If ($e <= 1) Then $zaehler = $zaehler + 1 ;Prüfung ob in Kreis oder nicht
    $punktnummer = $punktnummer + 1 ;Punktnummer wird erhöht

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

    $fortschritt_prozent = 100 * $punktnummer / $versuche
    GUICtrlSetData($Fortschrittsbalken, $fortschritt_prozent)

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

    Until $punktnummer = $versuche ;Bedingung, wann Schluss ist(wenn die Punktnummer so hoch ist wie die Versuchsanzahl)

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

    $anteil = $zaehler / $versuche ;Die relative Häufigkeit, ob ein Punkt im Kreis landet oder nicht, wird berechnet
    $annaeherung = 4 * $anteil ;die rel. Häufigkeit wird mit 4 multipliziert, um den ungefähren Wert für Phi zu erlangen

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

    MsgBox(0 + 48, "Annäherungswert Phi", $annaeherung) ;Nun noch die Ausgabe in einem Info-Fenster
    ContinueLoop (1)

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

    Case $schliessen
    Exit

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

    EndSwitch

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

    WEnd

    [/autoit]

    Mfg Spider

  • Hi,

    Spoiler anzeigen
    [autoit]

    Opt("Mustdeclarevars", 1) ;Alle Variablen müssen deklariert werden

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

    Dim $versuche ;Hier werden die Variablen deklariert, zur Übersicht alle einzeln und in der richtigen Reihenfolge
    Dim $zaehler
    Dim $punktnummer
    Dim $x
    Dim $y
    Dim $e
    Dim $anteil
    Dim $annaeherung
    Dim $Hauptfenster
    Dim $Label1
    Dim $Anweisung
    Dim $CR_me
    Dim $CR_Pi
    Dim $Input_versuchsanzahl
    Dim $button_berechnen
    Dim $nMsg
    Dim $schliessen
    Dim $Fortschrittsbalken
    Dim $fortschritt_prozent
    $zaehler = 0 ;Vorsichtshalber wird der Zähler auf NULL gesetzt

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

    #include <GUIConstants.au3>
    #include <misc.au3>

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

    #Region ### START Koda GUI section ### Form=c:\dokumente und einstellungen\leuprecht martin
    $Hauptfenster = GUICreate("Phi Näherungswert-Berechnung by Roman Leuprecht", 633, 447, 193, 125)
    GUISetFont(12, 400, 0, "Calibri")
    GUISetBkColor(0xFFFFFF)
    $Label1 = GUICtrlCreateLabel("Näherungswert-Berechnung für Pi mit dem Monte-Carlo-Verfahren", 24, 48, 571, 30)
    GUICtrlSetFont(-1, 16, 400, 0, "Calibri")
    $Anweisung = GUICtrlCreateLabel("Geben sie hier die Anzahl der zu tätigenden Versuche an:", 16, 136, 374, 23)
    $CR_me = GUICtrlCreateLabel("Copyright Roman Leuprecht", 72, 376, 183, 23)
    $Input_versuchsanzahl = GUICtrlCreateInput("Versuchsanzahl", 400, 136, 145, 27)
    GUICtrlSetCursor(-1, 5)
    $button_berechnen = GUICtrlCreateButton("Näherungswert berechnen", 200, 192, 233, 81, 0)
    GUICtrlSetCursor(-1, 0)
    $schliessen = GUICtrlCreateButton("Fenster schließen", 368, 368, 161, 33, 0)
    GUICtrlSetCursor(-1, 2)
    $Fortschrittsbalken = GUICtrlCreateProgress(24, 304, 569, 41)
    GUICtrlSetCursor(-1, 7)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button_berechnen
    $punktnummer = 0
    $versuche = GUICtrlRead($Input_versuchsanzahl)

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

    Do
    $x = Random() ;Die Zufallskoordinate X wird generiert
    $y = Random() ;Die Zufallskoordinate Y wird generiert
    $e = Sqrt($x ^ 2 + $y ^ 2)

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

    If ($e <= 1) Then $zaehler = $zaehler + 1 ;Prüfung ob in Kreis oder nicht
    $punktnummer = $punktnummer + 1 ;Punktnummer wird erhöht

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

    $fortschritt_prozent = $punktnummer/$versuche
    GUICtrlSetData($Fortschrittsbalken, $fortschritt_prozent*100)

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

    Until $punktnummer = $versuche ;Bedingung, wann Schluss ist(wenn die Punktnummer so hoch ist wie die Versuchsanzahl)

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

    $anteil = $zaehler / $versuche ;Die relative Häufigkeit, ob ein Punkt im Kreis landet oder nicht, wird berechnet
    $annaeherung = 4 * $anteil ;die rel. Häufigkeit wird mit 4 multipliziert, um den ungefähren Wert für Phi zu erlangen

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

    MsgBox(0 + 48, "Annäherungswert Phi", $annaeherung) ;Nun noch die Ausgabe in einem Info-Fenster
    ContinueLoop (1)

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

    Case $schliessen
    Exit

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

    EndSwitch

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

    WEnd

    [/autoit]

    Mist GTA war schneller :P.

    2 Mal editiert, zuletzt von anno2008 (3. Oktober 2008 um 14:26)

  • Du musst auch andere Variablen auf 0 setzen, sonst wird Phi jedes mal größer :D

    [autoit]

    Case $button_berechnen
    $punktnummer = 0
    $zaehler=0
    $anteil=0
    $annaeherung=0
    $versuche = GUICtrlRead($Input_versuchsanzahl)

    [/autoit]
  • ähhm, nein. Das war nur die Progress-Variable. Aber auch der "Punkt-in-Kreis-Zähler" wird nie resetted -> Wird immer größer mit jedem Durchlauf, ich hatte dann Phi = 13.45 oder so :D