Hier mal eine Klasse, die aufgrund der Formel aus Betrag#2 arbeitet.
Wenn man einen Durchschnitt berechnet, dann kommt als Datentyp eigentlich nur ein Fliesskommatyp in Frage.
Delphi-Quellcode:
type
TDurchschnitt =
class(TObject)
private
FAvg : Extended;
FCount : Integer;
function GetAverage: Extended;
function GetCount: Integer;
public
procedure AddValue(value:Extended);
procedure RemoveValue(value:Extended);
procedure Clear;
property Average:Extended
read GetAverage;
property Count:Integer
read GetCount;
end;
procedure TDurchschnitt.AddValue(value: Extended);
begin
FAvg := (FAvg * FCount + Value)/(Count+1);
Inc(FCount);
end;
procedure TDurchschnitt.RemoveValue(value: Extended);
begin
if FCount > 1
then
begin
FAvg := (FAvg * FCount - Value)/(Count-1);
Dec(FCount);
end
else
Clear;
end;
procedure TDurchschnitt.Clear;
begin
FAvg := 0.0;
FCount := 0;
end;
function TDurchschnitt.GetAverage: Extended;
begin
Result := FAvg;
end;
function TDurchschnitt.GetCount: Integer;
begin
Result := FCount;
end;