Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#3

AW: bestimmte teile einses arrays auslesen

  Alt 13. Jun 2011, 10:13
Warum nicht gleich beim Einlesen/Sammeln zusammenrechnen und nur noch die 180 speichern?


Delphi-Quellcode:
type
  TMessdaten = class
    Daten: array of Byte;
    Zaehler: Integer;
    Rechnung: Integer;

    procedure Start;
    procedure NeuerWert(X: Byte);
    procedure Ende;
  end;

procedure TMessdaten.Start;
begin
  Daten := nil;
  Zaehler := 0;
  Rechnung := 0;
end;

procedure TMessdaten.NeuerWert(X: Byte);
var
  i: Integer;
begin
  Inc(Zaehler);
  Inc(Rechnung, X);
  if Zaehler = 100 then begin
    i := Length(Daten);
    SetLength(Daten, i + 1);
    Daten[i] := Rechnung / 100;
    if Daten[i] > 0.7 then Daten[i] := 1
    else if Daten[i] < 0.3 then Daten[i] := 0;
    Zaehler := 0;
    Rechnung := 0;
  end;
end;

procedure TMessdaten.Ende;
var
  i: Integer;
begin
  if Zaehler <> 0 then begin
    i := Length(Daten);
    SetLength(Daten, i + 1);
    Daten[i] := Rechnung / Zaehler;
    if Daten[i] > 0.7 then Daten[i] := 1
    else if Daten[i] < 0.3 then Daten[i] := 0;
    Zaehler := 0;
    Rechnung := 0;
  end;
end;
bzw.
Delphi-Quellcode:
procedure TMessdaten.NeuerWert(X: Boolean);
var
  i: Integer;
begin
  Inc(Zaehler);
  if X then Inc(Rechnung);
Aber alle 10ms sind in einem so komplexem System schon recht viel gewollt.
Ich hoffe es müssen nicht genau 10ms sein, sondern können auch mal 20 sein

Eventuell noch das Array optimieren, also vorher setzen und dann nur noch ausfüllen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (13. Jun 2011 um 10:55 Uhr)
  Mit Zitat antworten Zitat