Pages: [1]   Go Down
Author Topic: increment boucle for()  (Read 4182 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Full Member
***
Karma: 0
Posts: 207
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 !
Logged

Pays de la betise
Offline Offline
Sr. Member
****
Karma: 4
Posts: 419
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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).
Logged

"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

0
Offline Offline
Full Member
***
Karma: 0
Posts: 207
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 !
« Last Edit: September 21, 2009, 01:37:26 am by KiliYaBB » Logged

Pays de la betise
Offline Offline
Sr. Member
****
Karma: 4
Posts: 419
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

"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

0
Offline Offline
Full Member
***
Karma: 0
Posts: 207
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Alors la je te remercie ! et excuse moi Gromain59 !
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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:
for (int i=0;i<=2;)

autre exemple, pour une boucle infinie:
Code:
for(;;)
est tout à fait valide vu que la "condition" est considérée comme vrai si elle est omise...
« Last Edit: September 22, 2009, 04:59:17 am by elwing » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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++
    }
}
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Pays de la betise
Offline Offline
Sr. Member
****
Karma: 4
Posts: 419
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

"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

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

Pages: [1]   Go Up
Jump to: