diff options
author | Erich Eckner <git@eckner.net> | 2018-09-25 09:23:14 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2018-09-25 09:26:56 +0200 |
commit | bbe06ed249041958373b0ed9aec3710c357ee2ef (patch) | |
tree | a4b2b3910f8f0794301fce1ee538476121145706 | |
parent | 0227428481e77a85e8ff148299a5a26be22069a7 (diff) | |
download | units-bbe06ed249041958373b0ed9aec3710c357ee2ef.tar.xz |
matheunit.pas: ermittleMittelwert neu
-rw-r--r-- | matheunit.pas | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/matheunit.pas b/matheunit.pas index da1a83d..30fa966 100644 --- a/matheunit.pas +++ b/matheunit.pas @@ -61,6 +61,7 @@ function knownValue(nam: string; val: extended): tKnownValue; function berechneEinheitsZelle(invarianz,modulus: tInt64Point): tInt64Point; function ggT(a,b: int64): int64; function ermittleAnstieg(dat: string; xSpalte,ySpalte: longestOrdinal): extended; +function ermittleMittelwert(dat: string; werteSpalte,gewichteSpalte: longestOrdinal): extended; implementation @@ -1041,5 +1042,57 @@ begin result:=(anz*xySum-xSum*ySum)/(anz*xQdrSum-sqr(xSum)); end; +function ermittleMittelwert(dat: string; werteSpalte,gewichteSpalte: longestOrdinal): extended; +var + f: textFile; + s: string; + wSum,gSum: extended; + wert: tExtPoint; + i,j: longestOrdinal; + reihenfolge: string[2]; + positionen: array[0..2] of longestOrdinal; +begin + if werteSpalte=gewichteSpalte then + fehler('Werte- und Gewichtespalte dürfen nicht übereinstimmen!'); + + wSum:=0; + gSum:=0; + assignFile(f,dat); + reset(f); + if gewichteSpalte < 0 then begin + while not eof(f) do begin + readln(f,s); + for i:=1 to werteSpalte-1 do + erstesArgument(s); + wSum:=wSum+strToFloat(erstesArgument(s)); + gSum:=gSum+1; + end; + end + else begin + positionen[0]:=-1; + positionen[1]:=min(werteSpalte,gewichteSpalte); + positionen[2]:=max(werteSpalte,gewichteSpalte); + if werteSpalte<gewichteSpalte then + reihenfolge:='xy' + else + reihenfolge:='yx'; + while not eof(f) do begin + readln(f,s); + for j:=1 to 2 do begin + for i:=positionen[j-1]+1 to positionen[j]-1 do + erstesArgument(s); + wert[reihenfolge[j]]:= + strToFloat(erstesArgument(s)); + end; + wSum:=wSum+wert['x']*wert['y']; + gSum:=gSum+wert['y']; + end; + end; + closeFile(f); + if gSum=0 then + fehler('Keine Werte in Mittelwert-Datei'''+dat+'''!'); + result:=wSum/gSum; +end; + end. |