Go Down

Topic: increment boucle for() (Read 4 times) previous topic - next topic

KiliYaBB

Bonjour,

D'après mes tests, ca ne compile pas si on ne met pas d'increment dans une boucle for :

for (int i=0;i<=2)

ne compile pas.

je suis donc obligé de mettre par exemple :

for (int i=0;i<=2;i++)

dommage que l'on soit obligé de mettre i++ j'aurai bien aimé incrémenter moi même dans la boucle mais bon cest comme ca.

Ma question est : est-ce possible de faire en plus :

for (int i=0;i<=2;i++){
if (...)
i=i+1;
...
}

est ce que ce i=i+1 incrémentera t'il bien i en plus de lincrément automatique i++ ?

n'y a til pas risque de plantage ?

MERci !

Gromain59

C'est assez normal que ça ne compile pas. Le langage "arduino" est très proche du C et comme tout langage de programmation, il y a des règles de codage à respecter.

à priori pas de risque pour ce que tu souhaites faire:

i++ équivaut à i=i+1

par contre, le "i" de la boucle et de le "i" dans ton traitement du "if" sont les mêmes, donc si tu y incrémentes "i", le compteur de la boucle est modifié (+2 sur le tour au lieu de +1).
"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

KiliYaBB

#2
Sep 21, 2009, 08:36 am Last Edit: Sep 21, 2009, 08:37 am by KiliYaBB Reason: 1
Merci Groromain59

En fait mon code serait :

for (int i=0;i<=1;i++){
  if (toto==1){
     i=i+1;
     action-a-realiser;
  }
}
L'objectif étant :

si toto==1 n'est pas vrai alors la boucle est réaliser deux fois (pour i=0 et i=1)

et si toto==1 est vrai alors la boucle n'est réalisé qu'une fois puisqu'a la fin de la première boucle on se retrouve avec le i=i+1 ET le i++ de la boucle ce qui donne un i égal a 2.

D'après ce que tu me dis, cela devrait marcher, non ?

A moins que quelqun ait plus simple pour faire ce que je veux : si toto==1, on  fait l'action et la boucle s'arrête, si toto==1 n'est pas vrai a la premiere boucle, on retente une deuxieme fois.

Merci !

Gromain59

y a plus simple:

for (i=0, i<=2, i++)
{
 if (toto==1){
 break; // tu forces la sortie de la boucle
 }
}

voir ici: http://arduino.cc/en/Reference/Break

et puis ch'suis pas Gro  ;D
"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

KiliYaBB

Alors la je te remercie ! et excuse moi Gromain59 !

elwing

#5
Sep 22, 2009, 11:57 am Last Edit: Sep 22, 2009, 11:59 am by elwing Reason: 1
c'est du C...

Quote
for (int i=0;i<=2)

ne compile pas.


c'est normal, en C for est défini comme:

Code: [Select]
for ( init-expression ; cond-expression ; loop-expression )
  statement


il manque une expression dans ton code, tu peux par contre parfaitment y mettre des expressions vide, c'est à dire:
Code: [Select]
for (int i=0;i<=2;)

autre exemple, pour une boucle infinie:
Code: [Select]
for(;;) est tout à fait valide vu que la "condition" est considérée comme vrai si elle est omise...

Andreq

Si jamais tu veux vraiment controllé l'incrémentation dans ta boucle,

Tu peux soit, utilise une boucle WHILE


while(i < X){
    if(i == 0){
        i++
    }
}

OU

Utilisé une boucle FOR avec aucune incrémentation

for(i = 0; i < X; i){  //   "i" ou bien "i=i"
     if(i == 0){
        i++
    }
}

Par contre, l'idée du break est bien sur la meilleur solution dans ton cas ;)

elwing

Quote
Utilisé une boucle FOR avec aucune incrémentation

for(i = 0; i < X; i){  //   "i" ou bien "i=i"
    if(i == 0){
       i++
   }
}


ou mieux:
for(i = 0; i < X; ){
    if(i == 0){
       i++
   }
}

Andreq

Quote

Quote:
Utilisé une boucle FOR avec aucune incrémentation

for(i = 0; i < X; i){  //   "i" ou bien "i=i"
   if(i == 0){
      i++
  }
}


ou mieux:
for(i = 0; i < X; ){
   if(i == 0){
      i++
  }
}



Oui tout a fait, j'ai vu la fin de ton message une fois mon post envoyé -_- Shame on me.

Par contre, côté "lecture" du code, c'est peut-être plus clair pour certain avec les 3 paramètre remplis.

Gromain59

en gros, il y a autant de façon de faire que de programmeur. Des façons plus ou moins sexy...
en général, il existe toujours une fonction qui répond déjà au besoin.
"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

elwing

Quote
en gros, il y a autant de façon de faire que de programmeur. Des façons plus ou moins sexy...
en général, il existe toujours une fonction qui répond déjà au besoin.


tout à fait exact, et en général, exception faite pour les commentaires, je trouve que moins il y a de code inutile plus le code est clair...

Go Up