AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Moving Average

Ein Thema von fl63 · begonnen am 25. Aug 2008 · letzter Beitrag vom 6. Sep 2008
Antwort Antwort
Seite 2 von 3     12 3      
fl63

Registriert seit: 30. Mär 2008
124 Beiträge
 
#11

Re: Moving Average

  Alt 27. Aug 2008, 17:58
Ok Diese Frage ist geklärt.
Das Word gleich Integer ist wußte ich bis Dato nicht.
Danke.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#12

Re: Moving Average

  Alt 27. Aug 2008, 18:18
Word = 16 Bit ohne Vorzeichen
integer = 32 Bit mit Vorzeichen

Word passt also immer in Integer.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#13

Re: Moving Average

  Alt 27. Aug 2008, 20:10
Hallo,

Zitat von fl63:
... Was ist ein Skip Value?? ...
ein Parameter mit dem du die FixedRows oder FixedCols übergehen kannst:

Delphi-Quellcode:
function StringsToData(strings: TStrings; skip: Word = 0; default: Double = 0): TDoubleDynArray;
var
  i: Integer;
begin
  SetLength(Result, strings.Count - skip);
   for i := Low(Result) to High(Result) do
     Result[i] := StrToFloatDef(strings[i + skip], default);
end;
Getippt und nicht getestet. Die Anpassung der Prozedur DataToStrings() überlasse ich dir zur Übung.

Zitat von fl63:
... Die Ausgabe der Ergebnisse müssen ein paar Spalten weiter angezeigt werden. FixedCol Problem. Wenn ich Unter CalcButtonClick DatatoStrings(sma(Cols[4]..) eingebe erscheinen gar keine Ergebnisse in der Spalte. ...
Hat denn dein Grid genügend Spalten? Der Spalten-Index 4 bezeichnet die fünfte Spalte ...

Freundliche Grüße
  Mit Zitat antworten Zitat
fl63

Registriert seit: 30. Mär 2008
124 Beiträge
 
#14

Re: Moving Average

  Alt 28. Aug 2008, 15:10
Hallo Marabu,

Index 4 ist nur wahllos herausgegriffen.

Das Grid hat im Moment 3 Spalten, wobei Spalte B (Excel Notation) die zu berechnende Spalte ist.
Das Ergebnis mit deinen Funktionen erscheint in Spalte C und überschreibt damit andere Werte.
Mir bleibt dabei nur Spalte C in sichere Entfernung per MoveCol zu verschieben, daraufhin das RechenErgebnis in eine Spalte zB. D ebenfalls zu verschieben und die alte Spalte C wiederherzustellen.
Für die Berechnung des 5er, 10er und 20er Durchschnitts brauche ich 3 Ergebnisspalten (D,E,F).

Du siehst die Zahl der Spalten ist annähernd unbegrenzt.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#15

Re: Moving Average

  Alt 29. Aug 2008, 21:19
Hallo,

Zitat von fl63:
... Das Grid hat im Moment 3 Spalten ...
und ich hatte dich extra noch gefragt:

Zitat von marabu:
... Hat denn dein Grid genügend Spalten? Der Spalten-Index 4 bezeichnet die fünfte Spalte ...
Du kannst zwar beliebige Spalten addressieren, angezeigt werden aber nur die Spalten mit Index < ColCount.
Oder anders ausgedrückt: Nur weil du etwas in Spalte 5 schreibst, wird die Spalte 5 nicht sichtbar.

Gute Nacht
  Mit Zitat antworten Zitat
fl63

Registriert seit: 30. Mär 2008
124 Beiträge
 
#16

Re: Moving Average

  Alt 31. Aug 2008, 13:56
Hallo Marabu,
Mein Fehler, habe die Test-Datei auf zehn LeerSpalten erweitert und siehe da es funktioniert.
Bleibt die letzte Frage.
Bei einem 5er Durchschnitt erscheinen in den ersten vier Zeilen Ergebnisse die da nicht hingehören.
Das erste richtige Ergebnis ist in der fünften Zeile, wie bekomme ich die ersten vier Zeilen gelöscht:
Mein Vorschlag :
Delphi-Quellcode:
For i =1 to StrToInt(Edit1.Text)-1 do
JvSG1.Cells[4,i] :='';
oder gibt es in der für mich als Laien sehr schwer durchschaubaren Rechenprozedur eine bessere Möglichkeit.

Schönen Sonntag
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#17

Re: Moving Average

  Alt 31. Aug 2008, 14:33
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
  Mit Zitat antworten Zitat
fl63

Registriert seit: 30. Mär 2008
124 Beiträge
 
#18

Re: Moving Average

  Alt 2. Sep 2008, 12:45
Ich bedanke mich bei allen die geholfen haben insbesondere bei Marabu. Meine Frage ist beantwortet.
  Mit Zitat antworten Zitat
fl63

Registriert seit: 30. Mär 2008
124 Beiträge
 
#19

Re: Moving Average

  Alt 3. Sep 2008, 14:54
Winzigen Fehler entdeckt:
Delphi-Quellcode:
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 // hier FEHLER ausgebessert
      then Result[i] := 0 // keine Berechnung für die ersten n-1 Werte
      else Result[i] := dSum / n;
  end;
end;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#20

Re: Moving Average

  Alt 3. Sep 2008, 16:57
Hallo,

die Bedeutung von "Succ(i) < n" hatte ich mit einem Kommentar herausgestellt. Willst du wirklich den ersten möglichen Wert ignorieren?

Auch wenn ich das nicht glauben mag, noch ein Hinweis: "i < n" ist gleichwertig zu "Succ(i) <= n", aber viel klarer.

Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz