Forum: PC-Programmierung jedes 12. Element aus einem array kopieren


von Max (Gast)


Lesenswert?

Hallo,

ich habe ein Array, welches 100 Elemente hat.
Davon soll ich jedes 12. in ein anderen Array packen.

Wie wäre da das beste vorgehen?
Ich würde es momentan mit einer for-schleife machen
1
static uint8_t y = 0;
2
for(uint8_t x=0; x<100; x+=12)
3
{
4
  array2[y] = array1[x];
5
  y++;
6
}

Danach muss ich das ganze 8 mal durchlaufen lassen. Ich bekomme also 8 
mal ein Array mit 100 elementen, (also 800 elemente), wo jeder 12 in 
einem anderen array gespeichert werden soll.
Beim 2. mal darf dann allerdings nicht bei element 0 gestartet werden, 
sondern bei element 8.
Das letzte element vom 1. Zyklus ist das 96. Element. sprich 12 Elemente 
weiter ist das 8. im 2. Zyklus.

Da würde ich anstelle von der 0 eine neue variable einfügen und mit 
dieser dann den Start der for-schleife ausrechnen.
1
static uint8_t y = 0;
2
static uint8_t z = 0;
3
for(uint8_t x=z; x<100; x+=12)
4
{
5
  array2[y] = array1[x];
6
  y++;
7
  z = x;
8
}
9
z = z + 12 - 100;

Gibt es da nicht aber einen schöneren weg?

von Sebastian R. (sebastian_r569)


Lesenswert?

Zweite For-Schleife drumherum, die sich um den Indes-Offset/Startwert 
kümmert?

Und irgendwie klingt das für mich noch, als sei ein Modulo praktisch.

Aber ich kriegs gerade nicht aus meinem Kopf erklärt

von Max (Gast)


Lesenswert?

Sebastian R. schrieb:
> Zweite For-Schleife drumherum, die sich um den Indes-Offset/Startwert
> kümmert?

Ich habe die Daten ja noch nicht.
Es wird die Funktion mit den jeweiligen Daten neu aufgerufen.
Der Buffer, in dem die 100 elemente sind, wird dann jedesmal neu 
beschrieben.

Sebastian R. schrieb:
> Und irgendwie klingt das für mich noch, als sei ein Modulo praktisch.

Daran hatte ich auch gedacht. Habe aber gedacht, dass es langsamer wäre, 
da ja jedesmal gerechnet werden muss.
1
static uint8_t y = 0;
2
for(uint8_t x=0; x<100; x++)
3
{
4
  if(0 == (x%12))
5
  {
6
    array2[y] = array1[x];
7
    y++;
8
  }
9
}

von Dirk B. (dirkb2)


Lesenswert?

Max schrieb:
> z = z + 12 - 100;

Welchen Wert hat x nach der Schleife?
Die letzte Zuweisung in der Schleife ist z=x, danach kam x+=12 und die 
Schleife wird verlassen.

Demnach ist z = x-100; (oder x % 100)

von A. S. (Gast)


Lesenswert?

Max schrieb:
> Gibt es da nicht aber einen schöneren weg?

Lass das X (bzw. Z) einfach weg.
1
static uint8_t x = 0;
2
static uint8_t y = 0;
3
for( ; x<100; x+=12)
4
{
5
  array2[y++] = array1[x];
6
}
7
x = x - 100;

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.