diff options
-rw-r--r-- | matheunit.pas | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/matheunit.pas b/matheunit.pas index 71005c5..5247f68 100644 --- a/matheunit.pas +++ b/matheunit.pas @@ -919,39 +919,53 @@ var s: string; xSum,xQdrSum,ySum,xySum: extended; wert: tExtPoint; - i,anz: longestOrdinal; + i,j,anz: longestOrdinal; + reihenfolge: string[2]; + positionen: array[0..2] of longestOrdinal; begin if xSpalte=ySpalte then begin result:=1; exit; end; - anz:=0; + + positionen[0]:=-1; + positionen[1]:=min(xSpalte,ySpalte); + positionen[2]:=max(xSpalte,ySpalte); + + if xSpalte<ySpalte then + reihenfolge:='xy' + else + reihenfolge:='yx'; + xSum:=0; + xQdrSum:=0; ySum:=0; xySum:=0; - xQdrSum:=0; + anz:=0; + assignFile(f,dat); reset(f); while not eof(f) do begin readln(f,s); - for i:=0 to min(xSpalte,ySpalte)-1 do - erstesArgument(s); - wert[char(ord('x')+byte(ySpalte<xSpalte))]:= - strToFloat(erstesArgument(s)); - for i:=min(xSpalte,ySpalte)+1 to max(xSpalte,ySpalte)-1 do - erstesArgument(s); - wert[char(ord('x')+byte(xSpalte<ySpalte))]:= - strToFloat(erstesArgument(s)); - inc(anz); + 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; xSum:=xSum+wert['x']; ySum:=ySum+wert['y']; xySum:=xySum+wert['x']*wert['y']; xQdrSum:=xQdrSum+sqr(wert['x']); + inc(anz); end; closeFile(f); if anz=0 then fehler('Keine Werte in Anstiegs-Datei'''+dat+'''!'); - result:=(anz*xySum-xSum*ySum)/(anz*xQdrSum-sqr(xSum)) + if anz*xQdrSum=sqr(xSum) then + fehler('Anstieg aus '''+dat+''' nicht bestimmbar!'); + + result:=(anz*xySum-xSum*ySum)/(anz*xQdrSum-sqr(xSum)); end; end. |