Zitat:Ist deine (3-Minuten-)Messung spätestens dann beendet, wenn das Array voll ist, dann brauchst du keinen Ringpuffer. Bei der nächsten Messung würde das Array ja wieder von vorne beginnend aufgefüllt werden.
Willst du aber einen Ringpuffer als solchen haben, hat das an sich nichts mit dem Array-Initialisieren als solchem zu tun. Für den Ringpuffer brauchst du auch ein initialisiertes Array. Der Ringpuffer ist ja nur dazu da, um bei einer (un-)endlich lang dauernden Messung nur z.B. die letzten 3 Minuten zu speichern.
Weder bei der Ringpuffermethode, noch bei der ohne, werden Teile gelöscht - zumindest nicht explizit. Bei jeder dieser Methoden werden lediglich Daten überschrieben und ein Lese- und ein Schreibzeiger angepasst. Genau dieses Überschreiben (Replace) ist ja Ziel der Übung.
Ok, vermutlich habe ich eine falsche Vorstellung vom Ringpuffer. Bisher habe ich mir den manuell vorgestellt (Array ist 2 Pufferlängen groß, erster Pufferinhalt wird reingeschrieben, zweiter Pufferinhalt wird reingeschrieben, dritter wird reingeschrieben mit Überschreiben des ersten, vierter wird reingeschrieben mit Überschreiben des zweiten, etc). Das nennt man scheinbar "linear"? So meinst du es aber vermutlich nicht, sondern eben dynamisch mit Lese- und Schreibzeigern, von denen ich aber (bisher) nichts verstehe/kenne.
Aber: Ist das notwendig? Reicht für meine Anwendung ein linearer Ringpuffer nicht völlig aus?
Folgende Idee: Für die Verarbeitung ist es ja nicht notwendig, dass ich so viele "Vergangenheitswerte" mitnehme. Es würde, um zB den Knick beim Intergieren zu vermeiden, völlig ausreichen jeweils den Pufferinhalt vom letzten Durchlauf mitzunehmen. Ich muss hier ja sowieso begrenzen, weil sonst in der Verarbeitung viel zu viele Daten ankommen und die Schleifengeschwindigkeit mit zunehmender Datenmenge ins unendliche geht.
Also: "Manueller Ringpuffer". Dh, immer nur den aktuellen Pufferinhalt und den vom Durchlauf zuvor in die Verarbeitung schicken, dort verarbeiten, im Graf nur den letzten anzeigen und die Daten (falls Speicherung gewünscht) dann in ein sehr groß initialisiertes Array schicken, welches so mit der Zeit aufgefüllt wird. Vor der Speicherung evtl noch den leeren Rest abschneiden und das wars.
Aber wahrscheinlich habe ich es doch noch nicht verstanden und auch hier ist wieder ein Denkfehler drin? -_-
@Datentypen:
Gut, da werde ich dann wohl leider nicht viel einsparen können. Danke für die Erklärung.