AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Werte in Array verschieben, funktioniert nicht richtig
Thema durchsuchen
Ansicht
Themen-Optionen

Werte in Array verschieben, funktioniert nicht richtig

Ein Thema von BAMatze · begonnen am 12. Aug 2009 · letzter Beitrag vom 12. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

Werte in Array verschieben, funktioniert nicht richtig

  Alt 12. Aug 2009, 07:39
Hallo und guten Morgen,

Hab da ein kleines Problem mit meiner eigenen Logik. Also ich habe ein Array mit Werten drin. Es kommen periodisch neue Werte hinzu (diese packe ich auf die letzte Stelle). Dafür soll der erste Wert es Arrays verschwinden. Habe das so programmiert (und denke ich hab irgendwie einen ziemlich simplen Fehler eingebaut, den ich aber irgendwie nicht sehe).

Hier mal die 2 Proceduren, die ich dafür verwende:

Delphi-Quellcode:
procedure TOszilloskopKanal.movedArray(temparray: array of double);
var i: integer;
begin
  // Das Array wird durchlaufen und es wird immer der Nachfolger auf den Vorgänger gesetzt.
  for i := 0 to Length(temparray)-2 do temparray[i] := temparray[i+1];
end;

// Es werden immer nur die letzen Werte gesetzt
procedure TOszilloskopKanal.SetYWert(dWert: double);
begin
  // Wenn ein Wert im Eingang reinkommt, werden zuerst
  // die Werte im Array verschoben,
  movedArray(FadyWert);
  // dass letzte Element, was nach dem Verschieben "frei" wird (effektiv sitzt dort immer noch der gleiche Wert drin, wie vor der ArrayWert-Verschiebung, aber dieser wurde ja schon auf das Vorletzte Feld kopiert.
  FadyWert[FiYmax] := dWert; //FiYMax = Maximale Anzahl an Y-Werten
  // Und es wird nach außen signalisiert, dass etwas am Eingang geschehen ist (dies soll für das Zeichnen den Timer sparen und die Performance verbessern)
  doChangeEingang;
end;
Hab das mal versucht so gut es geht zu kommentieren, damit ihr auch meinen Gedankengang verfolgen könnt. Problem ist wie gesagt, der Gedankengang stimmt nicht mit dem Ergebnis überein. Im Ergebnis erhält der vorletzte Array Wert nie den Wert des letzten (also muss etwas in der ArrayWert-Verschiebung wohl fehl gehen).

Vielen Dank
BAMatze
2. Account Sero
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Werte in Array verschieben, funktioniert nicht richtig

  Alt 12. Aug 2009, 07:42
Versuch mal
for i := Low(temparray)+1 to High(temparray) do temparray[i-1] := temparray[i];
Markus Kinzler
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Werte in Array verschieben, funktioniert nicht richtig

  Alt 12. Aug 2009, 07:45
Zitat von mkinzler:
Versuch mal
for i := Low(temparray)+1 to High(temparray) do temparray[i-1] := temparray[i];
Nein leider keine Änderung.
2. Account Sero
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Werte in Array verschieben, funktioniert nicht richtig

  Alt 12. Aug 2009, 07:47
Übergib den Array mal als var
Markus Kinzler
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Werte in Array verschieben, funktioniert nicht richtig

  Alt 12. Aug 2009, 07:50
Zitat von mkinzler:
Übergib den Array mal als var
wie ich schon schrieb, ziemlich dummer Fehler

Dank dir.
2. Account Sero
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Werte in Array verschieben, funktioniert nicht richtig

  Alt 12. Aug 2009, 07:54
geht das nicht schneller mit move?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Werte in Array verschieben, funktioniert nicht richtig

  Alt 12. Aug 2009, 08:45
Zitat von sirius:
geht das nicht schneller mit move?
Hmm da musst du mir mal einen Hinweis geben, kenne den Befehl erstmal so nicht.
2. Account Sero
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.006 Beiträge
 
Delphi 12 Athens
 
#8

Re: Werte in Array verschieben, funktioniert nicht richtig

  Alt 12. Aug 2009, 09:30
Delphi-Quellcode:
procedure TOszilloskopKanal.movedArray(var temparray: array of double);
var n: integer;
begin
  n := Length(temparray);
  if n > 1 then
    Move(temparray[1], temparray[0], (n - 2) * sizeof(temparray[0]));
end;
Uwe Raabe
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Werte in Array verschieben, funktioniert nicht richtig

  Alt 12. Aug 2009, 09:41
Werde ich mal testen. Danke @Uwe
2. Account Sero
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Werte in Array verschieben, funktioniert nicht richtig

  Alt 12. Aug 2009, 13:11
Move ist wenn ich mich recht erinnere auch nur eine Schleife die byteweise umkopiert (oder verwechsel ich das gerade mit copy? )

Aber wie dem auch sei: Das Array ständig rumzuwerfen ist, sagen wir mal vorsichtig "klobig gedacht". Das ist ein klassischer Fall für einen Ringbuffer, der zwar auch ein Array ist, in dem aber nie etwas umkopiert wird. Statt dessen hälst du dir zusätzlichen einen Merker an welchem Index gerade der aktuellste Wert steht. Mit einer Hand voll "mod" und "Length(array)" kann man dann erreichen dass der Merker immer im Kreis läuft, und auch zum Auslesen reichen die Infos Position und Länge ja aus.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:53 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