For Schleife nur bestimmte Werte hochzählen lassen

OP #1958131
Lesenswert?

Hallo,

habe eine Software für einen Kabeltestet entwickelt. Soweit funktioniert 
diese auch. Aber nur wenn man eine 1 zu 1 Verbindung hat. Wenn man jezt 
Leitungen testen möchte die gewollt verdreht sind. Wie kann ich ihm 
sagen das er in der For-Schleife nicht von 1 bis 9 hoch zählen soll 
sondern z.b. erst 2 dann 5 dann 8 usw.

Schöne Grüße

Christoph
Gast #1958136
Lesenswert?

uint_8 x[] = {5,2,7,3,9,7,1,4};
for( uint_8 i = 0; i < sizeof(x) ++i ) {
   print("%d\n", x[i] );
}


aber ob die das was weiterhilft weiss ich nicht, du hast ja nicht mal 
die Programmiersprache verraten.
Gast #1958142
Lesenswert?

Ganz einfach,
1
for i in 2 5 8

...wenn deine Programmiersprache diese Art der for-Schleife unterstützt. 
Du hast ja nicht verraten, welche Sprache du gerade verwendest.

Ansonsten heisst das Zauberword Array.

Oliver
#1958292
Lesenswert?

Christoph R. schrieb:
> Ich bin jetzt folgendermaßen vorgegangen:
>
> ...
> int x[9]={9,2,3,4,5,6,7,8,1};
> int i;
> ...
> for(i=0; i<10; ++i){long_delay(5); i[z]; PORTC=i}

Welche Werte nimmt denn i an?

  0 1 2 3 4 5 6 7 8 9


Zähl nach. Das sind 10 Werte, nicht 9

Dein Array hat aber nur 9 Elemente!

Merkregel
Bei einer Arraydefinition gibt man die Anzahl der Elemente an. Der 
höchste zulässige Index ist immer um 1 kleiner als diese Zahl

Ein Array

   int x[9]

besteht aus

  x[0]  x[1]  x[2]  x[3]  x[4]  x[5]  x[6]  x[7]  x[8]

zähl wieder nach. Das sind 9 Array-Elemente wie von der Definition 
gefordert. Beachte auch: Das letzte Array Element hat den Index 8!


>
> Er zählt von 1 bis 9 hoch. Bleibt bei 9 stehen. Wenn ich in die Klammer
> "i<sizeof(x)" schreibe zählt er bis 15.

kein Wunder. sizeof liefert die Größe in Bytes und nicht in int 
Einheiten

die Anzahl der Elemente in einem Array kann man so bestimmen

sizeof(x)/sizeof(x[0])

also: Gesamtgröße in Bytes / Größe eines Elementes in Bytes
#1958316
Lesenswert?

Christoph R. schrieb:
> Wie kann ich ihm
> sagen das er in der For-Schleife nicht von 1 bis 9 hoch zählen soll
> sondern z.b. erst 2 dann 5 dann 8 usw.
>
> Schöne Grüße
>
> Christoph

Ganz einfach: for(i=2 ; i<ENDE ; i+=3) {}


> int x[9]={9,2,3,4,5,6,7,8,1};
> int i;
> ...
> for(i=0; i<10; ++i){long_delay(5); i[z]; PORTC=i}

Der Code macht nicht nur keinen Sinn, er ist auch noch ziemlich 
bescheuert.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren