condition IF incluse dans une boucle FOR

Bonjour,

Selon vous, pouvons nous inclure une condition IF dans une boucle FOR du style :

for (position=position_initiale;if(SENS==0){position<=position_finale;}else{position>=position_finale;};if(SENS==1){position=position+15;}else{position=position-15;})
           {
           //Action de la boucle FOR
           }

Donc dans ma boucle FOR j'ai intégré une condition IF pour faire changer les paramètres. Donc, deux possibilités de boucle en fonction de la valeur SENS.

Bien sûr je pourrais écrire deux boucles FOR mais c'était dans l'optique de condenser mon code......

Merci.

Cordialement.

:fearful: ça pique aux yeux ...
C'est pas condensé, c'est des œufs brouillé que tu fais là ...
Tes conditions de boucle une fois définis tu ne peux les changer ... à part l'incrémentation ou décrémentation dans la boucle elle même.

  for (int position = position_initiale; position <= position_finale;position++)
  {
    position++;
    position--;
    position+=3;
  }

  for (int position = position_initiale; position <= position_finale;)//on peux omettre l'incrémentation et la faire dans la boucle, ça revient à faire un while
  {
    position++;
  }

Bonjour,

Oui effectivement, ce sont des œufs brouillés mais je voulais éviter de faire deux boucles......Ce soir je vais essayer de faire ceci...

for (if(SENS==0){position=position_initiale;position<=position_finale;position=position+15;}else{position=position_initiale;position>=position_finale;position=position-15;})
{
//Action de la boucle FOR
}

ça pique encore les yeux comme ça?

En fait, est ce qu'il est possible d'inclure un IF dans une boucle FOR plus simplement? Du style :

for (if(SENS==0){a=0;a<=10;a++;}else{a=0;a<=20;a++;})
{
//Action de la boucle FOR
}

Merci.

Bonjour,

la structure d'une boucle FOR se base sur 3 expressions. La première défini l'état initial, la deuxième l'état provoquant la fin, la troisième la progression.
En général, expression 1 et expression 3 sont plutôt des affectations ou des appels de fonctions et l'expression 2 une relation.
Cependant, de manière syntaxique, quand tu écris une expression for, passé la première parenthèse, on attend ces 3 expressions, et non des conditions les modifiants.

Il serait plus propre et moins source d'erreur d'écrire :

if(!SENS)
{
  for(position=position_initiale;position<=position_finale;position+=15)
       {
            //action boucle
       }
}else{  for(position=position_initiale;position<=position_finale;position-=15)
       {
            //action boucle
       }
}

avec "action boucle" défini dans une fonction, de manière à ce que tu ai juste à appeller cette fonction sans réécrire le même code en mode copié/collé,

au lieu de ceci :

for (if(SENS==0){position=position_initiale;position<=position_finale;position=position+15;}else{position=position_initiale;position>=position_finale;position=position-15;})
           {
           //Action de la boucle FOR
           }

qui au demeurant ne marchera pas.

En espérant t'avoir aidé,

Bonne journée.


Stéphane.

Non , impossible et tu le verras vite à la compilation.
Ajouté 3 if pour ne pas faire 2 boucle je vois pas ou est le gain là, temps visuel que quantité ?
Déjà un "for" chaque déclaration, condition, incrémentation est délimité par un ';' comme une fin d'instruction quoi, donc tes if point de point virgule dedans ...
Maintenant si c'est pour évité un gros code code répétitif dans ta boucle rien ne t’empêche d'appelé une fonction contenant le code désiré à l'intérieure de ta boucle.
Genre:

  int position_initiale = 0;
  int position_finale = 10;
  boolean sens = true;


  do
  {
      //tu fais ce que tu désires ...
  }
  while(maFonction(sens));

 boolean maFonction(byte sens)
 {
    if(sens)
    {
         position_initiale+=1;
         //tu fais ce que tu désires ...
         if(position_initiale == position_finale)
         {
             //tu fais ce que tu désires ...
             return false;
         }
    }
    else
    {
        position_initiale-=1;
         if(position_initiale == position_finale)
         {
             return false;
         }
    }
    return true;
 }

Edit: Snootlab est passé devant :grin:

Oui effectivement, j'avais bien pensé à utiliser des appels de fonction pour éviter de réécrire deux fois les mêmes instructions dans mes deux boucles FOR.

Cependant, j'utilise Duinos et l'appel de fonction ma posé quelques problèmes mais je vais encore essayé.....

Merci pour vos propositions.

Cordialement.