summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2018-09-25 09:23:14 +0200
committerErich Eckner <git@eckner.net>2018-09-25 09:26:56 +0200
commitbbe06ed249041958373b0ed9aec3710c357ee2ef (patch)
treea4b2b3910f8f0794301fce1ee538476121145706
parent0227428481e77a85e8ff148299a5a26be22069a7 (diff)
downloadunits-bbe06ed249041958373b0ed9aec3710c357ee2ef.tar.xz
matheunit.pas: ermittleMittelwert neu
-rw-r--r--matheunit.pas53
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.