Frage von DIGGER6, 86

Frage zu Ringpuffer und Schleife in C oder C++?

Hallo, ich steige langsam in die Programmierung ein und habe eine Frage zum aktualisieren von Datenreihen. zuerst mal den Code dann die Frage:

int array[50] = { 0 };
for(x=49; x>=1; x = x-1)
{
array[x]=array[x-1]
}
array[0]= NewValue;

Ok also es gibt ein Array mit 50 Werten. Wenn ein neuer Wert (NewValue) kommt dann wird obige Schleife ausgeführt und der neue Wert rückt in [0] und alle folgenden werden um eine Position nach hinten geschoben. Das war bisher meine Methode eine Datenreihe aktuell zu halten wenn neue Werte kommen. 50 Werte zu schreiben um 1 Wert zu aktualisieren ist wohl nicht so effektiv. Ich habe von Ringpuffern gelesen, dass diese eine bessere Alternative darstellen. Auch verstehe ich den Sinn von Pointern aber verstehe nicht wie das anhand meines Beispiels aussehen müsste??? Hat jemand eine Idee wie man die Datenreihe aktualisiert ohne alle 50 Werte einzelnd verschieben zu müssen?

Antwort
von Mikkey, 73

int iIn = 0, iOut = 0;

int ringbuffer[ANZAHL];

void Add(int wert) { ringbuffer[iIn] = wert; iIn = (iIn + 1) % ANZAHL; }

int Get() { int result = ringbuffer[iOut]; iOut = (iOut + 1) % ANZAHL; return result; }

Get musst Du natürlich mit einer Überprüfung versehen, ob überhaupt ein Wert enthalten ist.

Keine passende Antwort gefunden?

Fragen Sie die Community