Statistik Rechner

  • Hallo,
    ich wollte mal wieder etwas programmieren und da ich in Mathe zurzeit Statistik habe, habe ich angefangen einen Statistik Rechner zu programmieren.
    Bisher kann man die Varianz und die Standardabweichung ausrechnen.

    Skript
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global $ges = 0, $var = 0, $nach = 2, $trenn = ";", $liste = "", $label1, $edit_liste, $label2, $input_trenn, $label3, $input_nach, $label4, $input_vari, $Label5, $input_abwei, $button_rechnen

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

    $gui = GUICreate("Varianz Rechner", 361, 311)
    _Create()
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button_rechnen
    $str = StringSplit(GUICtrlRead($edit_liste), GUICtrlRead($input_trenn))
    For $i = 1 To $str[0]
    $ges += $str[$i]
    Next
    $mittel = $ges / $str[0]
    For $i = 1 To $str[0]
    $var += ($str[$i] - $mittel) ^ 2
    Next
    $varianz = (1 / ($str[0] - 1)) * $var
    $standard = $varianz ^ 0.5
    $pos = WinGetPos($gui)
    If $pos[3] = 425 Then
    _Set()
    Else
    WinMove($gui, "", $pos[0], $pos[1], $pos[2], 425)
    $nach = GUICtrlRead($input_nach)
    $trenn = GUICtrlRead($input_trenn)
    $liste = GUICtrlRead($edit_liste)
    _Del()
    _Create()
    _Set()
    EndIf
    EndSwitch
    WEnd

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

    Func _Runden($z)
    $z_s = StringSplit($z, ".")
    If @error Then Return ($z)
    $tre = GUICtrlRead($input_nach)
    $1 = StringLeft($z_s[2], $tre - 1)
    $z_s[2] = StringTrimLeft($z_s[2], $tre - 1)
    $2_u = StringLeft($z_s[2], 1)
    $z_s[2] = StringTrimLeft($z_s[2], 1)
    If StringLeft($z_s[2], 1) > 4 Then
    $2 = $2_u + 1
    Else
    $2 = $2_u
    EndIf
    $zahl = $z_s[1] & "." & $1 & $2
    Return ($zahl)
    EndFunc ;==>_Runden

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

    Func _Set()
    GUICtrlSetData($input_vari, _Runden($varianz))
    GUICtrlSetData($input_abwei, _Runden($standard))
    $var = 0
    $ges = 0
    EndFunc ;==>_Set

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

    Func _Create()
    $label1 = GUICtrlCreateLabel("Datensatz (nur Zahlen und Trennzeichen):", 8, 8, 288, 22)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")
    $edit_liste = GUICtrlCreateEdit($liste, 8, 32, 350, 200, BitOR($ES_AUTOVSCROLL, $ES_WANTRETURN, $WS_VSCROLL))
    GUICtrlSetData(-1, "")
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")
    $label2 = GUICtrlCreateLabel("Trennzeichen:", 8, 240, 100, 22)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")
    $input_trenn = GUICtrlCreateInput($trenn, 112, 240, 41, 26)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")
    $label3 = GUICtrlCreateLabel("Nachkommastellen:", 160, 240, 140, 22)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")
    $input_nach = GUICtrlCreateInput($nach, 304, 240, 41, 26)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")
    $label4 = GUICtrlCreateLabel("Varianz:", 8, 320, 61, 22)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")
    $input_vari = GUICtrlCreateInput("", 72, 320, 150, 26)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")
    $Label5 = GUICtrlCreateLabel("Standardabweichung:", 8, 368, 155, 22)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")
    $input_abwei = GUICtrlCreateInput("", 168, 368, 150, 26)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")
    $button_rechnen = GUICtrlCreateButton("Ausrechnen", 136, 272, 83, 33, $WS_GROUP)
    EndFunc ;==>_Create

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

    Func _Del()
    GUICtrlDelete($label1)
    GUICtrlDelete($edit_liste)
    GUICtrlDelete($label2)
    GUICtrlDelete($input_trenn)
    GUICtrlDelete($label3)
    GUICtrlDelete($input_nach)
    GUICtrlDelete($label4)
    GUICtrlDelete($input_vari)
    GUICtrlDelete($Label5)
    GUICtrlDelete($input_abwei)
    GUICtrlDelete($button_rechnen)
    EndFunc ;==>_Del

    [/autoit]

    MfG Tobi

  • Gut gemacht,
    genau dasselbe hatte wir auch vor Kurzem in der Schule....
    hab auch genau deshalb letztens ein programm geschrieben :D

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <ListviewConstants.au3>
    #include <StaticConstants.au3>
    #Include <GuiListView.au3>
    #include <EditConstants.au3>
    #include <Misc.au3>
    Opt("GUIOnEventMode", 1)
    Global $amount = 0
    Global $numbers[99][2]
    Global $listiteml[99]
    Global $listitemr[99]

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

    $hGUI = GUICreate('Korrelation',500, 690)
    $xilab = GUICtrlCreateLabel("Xi", 30, 30, 50, 20)
    GUICtrlSetFont(-1, 15)
    $yilab = GUICtrlCreateLabel("Yi", 170, 30, 50, 20)
    GUICtrlSetFont(-1, 15)
    Global $xinput = GUICtrlCreateInput("", 30, 50, 100, 25, $ES_Number)
    guictrlsetfont(-1, 12)
    Global $yinput = GUICtrlCreateInput("", 170, 50, 100, 25, $ES_Number)
    guictrlsetfont(-1, 12)
    Global $listviewxy = GUICtrlCreateListView("Nr.|Xi|Yi", 30, 100, 120, 400, -1,$LVS_EX_GRIDLINES)
    Global $listviewcal = GUICtrlCreateListView("Xi-Xquer|Yi-Yquer|(Xi-Xquer)²|(Yi-Yquer)²|(Xi-Xquer)*(Yi-Yquer)", 150, 100, 320, 400, -1,$LVS_EX_GRIDLINES)
    $Addbut = GUICtrlCreateButton("Hinzufügen", 280, 50, 100, 25)
    $clearbut = GUICtrlCreateButton("Lösche Tabelle", 350, 500, 120, 20)
    ;$calcbut = GUICtrlCreateButton("Berechnen", 30, 500, 300, 30)
    $helpbut = GUICtrlCreateButton("Hilfe", 450, 0, 50, 20)
    $xlab = GUICtrlCreateLabel("X", 300, 530, 20, 20)
    GUICtrlSetFont(-1, 15)
    $ylab = GUICtrlCreateLabel("Y", 480, 530, 20, 20)
    GUICtrlSetFont(-1, 15)
    $durchlab = GUICtrlCreateLabel("Durchschnitt:", 30, 560, 120, 30)
    GUICtrlSetFont(-1, 15)
    $Varlab = GUICtrlCreateLabel("Varianz:", 30, 590, 120, 30)
    GUICtrlSetFont(-1, 15)
    $Standlab = GUICtrlCreateLabel("Stnd. Abw.:", 30, 620, 120, 30)
    GUICtrlSetFont(-1, 15)
    $CoVlab = GUICtrlCreateLabel("CoV:", 30, 650, 50, 30)
    GUICtrlSetFont(-1, 15)
    $korlab = GUICtrlCreateLabel("Korrelation:", 250, 650, 120, 30)
    GUICtrlSetFont(-1, 15)
    $xquerlab = GUICtrlCreateLabel("", 150, 560, 170, 30, $SS_RIGHT)
    GUICtrlSetFont(-1, 15)
    $yquerlab = GUICtrlCreateLabel("", 330, 560, 170, 30, $SS_RIGHT)
    GUICtrlSetFont(-1, 15)
    $xvarlab = GUICtrlCreateLabel("", 150, 590, 170, 30, $SS_RIGHT)
    GUICtrlSetFont(-1, 15)
    $yvarlab = GUICtrlCreateLabel("", 330, 590, 170, 30, $SS_RIGHT)
    GUICtrlSetFont(-1, 15)
    $xslab = GUICtrlCreateLabel("", 150, 620, 170, 30, $SS_RIGHT)
    GUICtrlSetFont(-1, 15)
    $yslab = GUICtrlCreateLabel("", 330, 620, 170, 30, $SS_RIGHT)
    GUICtrlSetFont(-1, 15)
    $CoVerglab = GUICtrlCreateLabel("", 80, 650, 160, 30)
    GUICtrlSetFont(-1, 15)
    $korerglab = GUICtrlCreateLabel("", 360, 650, 110, 30)
    GUICtrlSetFont(-1, 15)
    GUISetState(@SW_SHOW)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    GUICtrlSetOnEvent($addbut, "_addtolist")
    GUICtrlSetOnEvent($clearbut, "_deleteall")
    GUICtrlSetOnEvent($helpbut, "_help")
    ;GUICtrlSetOnEvent($calcbut, "_calc")
    While 1
    if _ispressed("BD") and ControlGetFocus("Korrelation") = "Edit1" Then
    guictrlsetdata($xinput, guictrlread($xinput)&"-")
    sleep(100)
    ElseIf _ispressed("BD") and ControlGetFocus("Korrelation") = "Edit2" Then
    guictrlsetdata($yinput, guictrlread($yinput)&"-")
    sleep(100)
    EndIf
    if _ispressed("BE") and ControlGetFocus("Korrelation") = "Edit1" Then
    guictrlsetdata($xinput, guictrlread($xinput)&".")
    sleep(100)
    ElseIf _ispressed("BE") and ControlGetFocus("Korrelation") = "Edit2" Then
    guictrlsetdata($yinput, guictrlread($yinput)&".")
    sleep(100)
    EndIf
    sleep(40)
    WEnd

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

    Func _exit()
    Exit
    EndFunc

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

    Func _addtolist()
    $xin = guictrlread($xinput)
    $yin = guictrlread($yinput)
    If $xin <> "" and $yin <> "" Then
    $listiteml[$amount] = GUICtrlCreateListViewItem($amount+1&"|"&$xin&"|"&$yin, $listviewxy)
    $numbers[$amount][0] = $xin
    $numbers[$amount][1] = $yin
    $amount += 1
    GUICtrlSetData($xinput, "")
    GUICtrlSetData($yinput, "")
    _calc()
    Else
    MsgBox(0, "Fehler", "Bitte Zahlen eintragen")
    EndIf
    EndFunc

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

    Func _calc()
    If $amount > 1 Then
    _GUICtrlListView_DeleteAllItems($listviewcal)
    Dim $sum[2]
    Dim $mittxy[2]
    Dim $sumv[2]
    Dim $mittv[2]
    Dim $stdab[2]
    $sumco = 0
    For $i = 0 to $amount-1
    $actx = $numbers[$i][0]
    $acty = $numbers[$i][1]
    $sum[0] += $actx
    $sum[1] += $acty
    Next
    $mittxy[0] = $sum[0]/$amount
    $mittxy[1] = $sum[1]/$amount

    For $i = 0 to $amount-1
    $listitemr[$amount] = GUICtrlCreateListViewItem(round($numbers[$i][0]-$mittxy[0], 4)&"|"&round($numbers[$i][1]-$mittxy[1], 4)&"|"&round(($numbers[$i][0]-$mittxy[0])^2, 4)&"|"&round(($numbers[$i][1]-$mittxy[1])^2, 4)&"|"&round(($numbers[$i][0]-$mittxy[0])*($numbers[$i][1]-$mittxy[1]), 4), $listviewcal)
    $sumv[0] += ($numbers[$i][0]-$mittxy[0])^2
    $sumv[1] += ($numbers[$i][1]-$mittxy[1])^2
    $sumco += ($numbers[$i][0]-$mittxy[0])*($numbers[$i][1]-$mittxy[1])
    Next
    $mittv[0] = $sumv[0]/$amount
    $mittv[1] = $sumv[1]/$amount
    $stdab[0] = sqrt($mittv[0])
    $stdab[1] = sqrt($mittv[1])
    $CoV = $sumco/$amount
    $Korr = $CoV/($stdab[0]*$stdab[1])
    GUICtrlSetData($xquerlab, round($mittxy[0], 4))
    GUICtrlSetData($yquerlab, round($mittxy[1], 4))
    GUICtrlSetData($xvarlab, round($mittv[0], 4))
    GUICtrlSetData($yvarlab, round($mittv[1], 4))
    GUICtrlSetData($xslab, round($stdab[0], 4))
    GUICtrlSetData($yslab, round($stdab[1], 4))
    GUICtrlSetData($coverglab, round($CoV, 4))
    GUICtrlSetData($korerglab, round($Korr, 4))
    Else
    ;MsgBox(0, "Fehler", "Mehr als ein Wertepaar notwendig")
    EndIf
    EndFunc

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

    Func _deleteall()
    _GUICtrlListView_DeleteAllItems($listviewxy)
    _GUICtrlListView_DeleteAllItems($listviewcal)
    $amount = 0
    EndFunc

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

    Func _help()
    MsgBox(0, "Hilfe", "Noch keine Hilfe vorhanden, sie wird es auch nie geben.")
    EndFunc

    [/autoit]