Forum: PC-Programmierung Werte in Arrays schieben!


von Ma B. (drumstick)


Lesenswert?

Hallo!

Ich arbeite in c, uVision von Keil!

Ich möchte einen Mittelwert Bilden. Benütze ein Array mit Indexwert 8!

Meine Idee, erster gemessener Wert 5 in Array[0] speichern, dann aus dem 
Array den Mittelwert bilden.

5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 / 0 = 0.625

Den Wert von Array[0] ins Array[1] schieben, 2. Messwert 7 in Array[0] 
speichern.

7 + 5 + 0 + 0 + 0 + 0 + 0 + 0 / 0 = 1.5      usw.


Wie kann ich den Wert des Array[0] in Array[1] usw schieben / laden??

Array[0] <<= 1; Schiftet ja den Wert selbst!

Danke und Gruss!

M.B.

von Karl H. (kbuchegg)


Lesenswert?

M. B. schrieb:

> Wie kann ich den Wert des Array[0] in Array[1] usw schieben / laden??

Ist das eine Fangfrage?

     Array[1] = Array[0];


Aber wozu schieben. schreib doch einfach den nächsten Messwert nach 
Array[1]. Und den danach gemessenen nach Array[2], etc. etc. Du musst 
dir nur merken, wo der nächste Messwert hin muss. Und wenn du am Ende 
des Arrays angelangt bist, dann fängst du wieder beim Index 0 an.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Auf die schnelle:
1
#define MAX_VALS          0x10     // Muss 2^n sein !
2
3
unsigned int values[MAX_VALS] = { 0 }; 
4
5
void AddValue(unsigned int newVal)
6
{
7
  static unsigned int index=0;
8
9
  values[index] = newVal;
10
  index = ++index & (MAX_VALS-1);
11
}
Könnte noch ein kleiner Bug drin sein, geht aber ums Prinzip :-)

Die Grösse des Arrays ist dann deine Tiefe für die Mittelwertbildung. In 
einer anderen Funktion kannst dann einfach von 0..MAX_VALS über das 
Array iterieren.


Anm.:
SHIFT geht nur über Bits hinweg, bis zur Architekturgrösse, nicht aber 
über Felder eines Arrays oder andere WORD-Gruppen.


VG,
/th.

von DirkB (Gast)


Lesenswert?

Wenn du
1
index = ++index % MAX_VALS;
gehen auch beliebige Werte für MAX_VALS.

von Karl H. (kbuchegg)


Lesenswert?

Und wenn man dann noch
1
   index++;
2
   if( index == MAX_VALS )
3
     index = 0;

hat man beides mit einer Klappe geschlagen. Keine Division und trotzdem 
beliebige Werte für MAX_VALS, bei meistens nur ganz leichten 
Performance-Verlusten gegenüber der & Lösung, die im Regelfall völlig 
irrelevant sind.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.