Hallo,
dein Ansatz hat etwas von "Tipp-Ex", ich würde den Fehler lieber an der Stelle beseitigen, wo er entsteht.
Ich führe die 0 als einen speziellen Wert ein, und passe die Routinen so an, dass Berechnung und Ausgabe für die ersten n-1 Werte unterbleibt:
Delphi-Quellcode:
procedure DataToStrings(data: TDoubleDynArray; strings: TStrings; const fmt: string = '%f');
var
i: Integer;
begin
strings.Clear;
for i := Low(data) to High(data) do
if IsZero(Data[i])
then strings.Add('') // Null-Werte ausblenden
else strings.Add(Format(fmt, [Data[i]]));
end;
function SimpleMovingAverage(data: TDoubleDynArray; n: Word): TDoubleDynArray;
var
i: Integer;
dSum: Double;
begin
SetLength(Result, Length(data));
dSum := 0;
for i := Low(data) to High(data) do
begin
if i >= n then
dSum := dSum - data[i - n];
dSum := dSum + data[i];
if Succ(i) < n
then Result[i] := 0 // keine Berechnung für die ersten n-1 Werte
else Result[i] := dSum / n;
end;
end;
Wenn die Rechenprozedur für einen Laien nicht durchschaubar ist, dann habe ich den Algorithmus wohl schlecht implementiert.
Nachdenkliche Sonntagsgrüße