hi,
in folgendem quelltext werden statistische größen einer messreihe ausgegeben.
sie werden von einer ini eingelesen, die zuvor von einem unterprogramm erstellt wurde.
unter anderem soll auch der modalwert ausgegeben werden. (häufigster wert in einem array).
ergo das array in ein anderes kopiert, 2 verschachtelte schleifen mit laufvariablen und per if anweisung überprüfen ob die werte identsch sind. wenn dies der fall ist, soll eine zählvariable hochgesetzt werden. hier liegt das problem. ich weiß nciht, wie ich diese ausdrücken soll. die messreihe hat n werte. die anzhal schwankt je nach versuch.
z...zählvariable
0 <= z <= n
schleife für vergleich (zeile 90 bis 104)
Spoiler anzeigen
Do
Do
If $w[$i] = $q[$j] Then
$z[$i] = $z[$i] + 1
; MsgBox(0, "", $i & ", " & $j) ;Indexkontrolle
Else
$z[$i] = 0
EndIf
If $j = ($n - 1) Then
$j = 0
EndIf
$j = $j + 1
Until $j = ($n - 1)
$i = $i + 1
Until $i = $n
gesamtes unterprogramm
Spoiler anzeigen
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Include <Array.au3>
Opt ("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit];Global $q[999]
[/autoit] [autoit][/autoit] [autoit]#Region ### START Koda GUI section ### Form=E:\autoit\diagramm\auswertung.kxf
$Form2 = GUICreate("Auswertung", 234, 311, 302, 218)
$Group1 = GUICtrlCreateGroup("Auswertung", 0, 0, 233, 265)
$Label1 = GUICtrlCreateLabel("Median", 8, 25, 39, 17)
$Label2 = GUICtrlCreateLabel("geometr. Mittelwert", 8, 50, 93, 17)
$Label3 = GUICtrlCreateLabel("arithmet. Mittelwert", 8, 75, 92, 17)
$Label4 = GUICtrlCreateLabel("Modalwert", 8, 100, 53, 17)
$Label5 = GUICtrlCreateLabel("Spannweite", 8, 140, 60, 17)
$Label6 = GUICtrlCreateLabel("Varianz", 8, 165, 39, 17)
$Label7 = GUICtrlCreateLabel("Standartabweichung", 8, 190, 102, 17)
$Input1 = GUICtrlCreateInput("0", 140, 25, 73, 21)
$Input2 = GUICtrlCreateInput("0", 140, 50, 73, 21)
$Input3 = GUICtrlCreateInput("0", 140, 75, 73, 21)
$Input4 = GUICtrlCreateInput("0", 140, 100, 73, 21)
$Input5 = GUICtrlCreateInput("0", 140, 140, 73, 21)
$Input6 = GUICtrlCreateInput("0", 140, 165, 73, 21)
$Input7 = GUICtrlCreateInput("0", 140, 190, 73, 21)
$Label8 = GUICtrlCreateLabel("Klasseneinteilung", 8, 215, 86, 17)
$Label9 = GUICtrlCreateLabel("Klassenweite", 8, 240, 66, 17)
$Input8 = GUICtrlCreateInput("0", 140, 215, 73, 21)
$Input9 = GUICtrlCreateInput("0", 140, 240, 73, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("Ok", 0, 272, 65, 33, 0)
GUICtrlSetOnEvent ($Button1, "run_")
GUISetOnEvent($GUI_EVENT_CLOSE, "exit_")
GUISetState()
#EndRegion ### END Koda GUI section ###
While 1
Sleep(125)
WEnd
Func exit_()
Exit
EndFunc
Func run_()
$n=IniRead("cache.ini", "Anzahl", "n", "0")
Dim $w[$n], $q[$n], $z[$n]
For $i = 0 to ($n - 1)
$w[$i]=IniRead("cache_werte.ini", "Werte", "w" & $i, "0")
Next
_ArraySort($w)
$h = $n / 2
If $h = Int($h) Then ;median
GUICtrlSetData($Input1, $w[$h])
IniWrite("auswertung.ini", "Ergebnisse", "Median" , $w[$h])
Else
$h1 = $h + 0.5
$h2 = $h - 0.5
$m = ($w[$h1] + $w[$h2]) / 2
GUICtrlSetData($Input1, $m)
IniWrite("auswertung.ini", "Ergebnisse", "Median" , $m)
EndIf
$s = 0
For $i = 0 to ($n - 1) ; quadrat mittelwert
$q[$i] = $w[$i] * $w[$i]
$s = $s + $q[$i]
Next
$m2 = Sqrt($s / $n)
$m2 = Round($m2, 3)
GUICtrlSetData($Input2, $m2)
IniWrite("auswertung.ini", "Ergebnisse", "quadrat. Mittelwert" , $m2)
$s = 0
For $i = 0 to ($n - 1) ; mittelwert
$s = $s + $w[$i]
Next
$m1 = $s/$n
$m1 = Round($m1, 3)
GUICtrlSetData($Input3, $m1)
IniWrite("auswertung.ini", "Ergebnisse", "Mittelwert" , $m1)
For $i = 0 to ($n - 1); modalwert
$q[$i] = $w[$i]
Next
$i = 0
$j = 0
Do
Do
If $w[$i] = $q[$j] Then
$z[$i] = $z[$i] + 1
; MsgBox(0, "", $i & ", " & $j) ;Indexkontrolle
Else
$z[$i] = 0
EndIf
If $j = ($n - 1) Then
$j = 0
EndIf
$j = $j + 1
Until $j = ($n - 1)
$i = $i + 1
Until $i = $n
_ArrayDisplay($z)
$spann = $w[0] - $w[$n-1] ; spannweite
$spann = sqrt($spann * $spann)
$spann = Round($spann, 3)
GUICtrlSetData($Input5, $spann)
IniWrite("auswertung.ini", "Ergebnisse", "Spannweite" , $spann)
$s1 = 0
For $i = 0 To ($n - 1) ; varianz
$h1 = $w[$i] - $m1
$s1 = $s1 + $h1 * $h1
Next
$var = $s1 / ($n - 1)
$var = Round($var, 3)
GUICtrlSetData($Input6, $var)
IniWrite("auswertung.ini", "Ergebnisse", "Varianz" , $var)
$sabw = Sqrt($var) ; standartabweichung
$sabw = Round($sabw, 3)
GUICtrlSetData($Input7, $sabw)
IniWrite("auswertung.ini", "Ergebnisse", "Standartabweichung" , $sabw)
$klas = Sqrt($n) ; klasseneinteilung
If $klas < 6 Then
$klas = 6
GUICtrlSetData($Input8, $klas)
IniWrite("auswertung.ini", "Ergebnisse", "Klasseneinteilung" , $klas)
ElseIf $klas > 12 Then
$klas = 12
GUICtrlSetData($Input8, $klas)
IniWrite("auswertung.ini", "Ergebnisse", "Klasseneinteilung" , $klas)
Else
$klas = Round($klas)
GUICtrlSetData($Input8, $klas)
IniWrite("auswertung.ini", "Ergebnisse", "Klasseneinteilung" , $klas)
EndIf
$weite = $spann / $klas ; klassenweite
$weite = Round($weite, 3)
GUICtrlSetData($Input9, $weite)
IniWrite("auswertung.ini", "Ergebnisse", "Klassenweite" , $weite)
$i = 0
Do
IniWrite("cache_werte_sortiert.ini", "Werte", "w" & $i, $w[$i])
$i = $i + 1
Until $i = $n - 1
EndFunc