[C] contrôle if dans une boucle ... ?

contrôle if dans une boucle ... ? [C] - C++ - Programmation

Marsh Posté le 09-02-2003 à 23:56:35    

Bonjour !  
J'aurais voulu savoir si en C on a le droit d'imbriquer une structure de contrôle du type if...else à l'intérieur d'un for.
 
Le but étant que ma condition doit être vérifiée de i=0 à n (c'est pour des tableaux...).
 
Merci d'avance !!

Reply

Marsh Posté le 09-02-2003 à 23:56:35   

Reply

Marsh Posté le 10-02-2003 à 00:00:13    

Ben pourquoi pas?!

Reply

Marsh Posté le 10-02-2003 à 00:51:47    

Ben oui
 [:clweb]


---------------
@+ , Claude
Reply

Marsh Posté le 10-02-2003 à 00:52:25    

:??:  
 
Qu'est ce que tu veux dire par imbriquer (je soupconne quelque chose de louche et interdit).
Tu peux evidemment mettre un if dans les instructions devant etre repetees.

Reply

Marsh Posté le 10-02-2003 à 07:39:16    

Oui tu peux si c'est une imbrication :
 

Code :
  1. if (i < 2) {
  2.     for (j = 0; j < 5; j++) {
  3.         ...
  4.     }
  5. }


 
L'inverse est vraie aussi.


---------------
Le site de ma maman
Reply

Marsh Posté le 10-02-2003 à 07:44:22    

ça oki, ais je voudrais un truc de la forme :

Code :
  1. if( for(...)) ...


 
Mais bon ça c'est pas faisable, alors est-ce que en mettant le if dans le for ça fait la même chose ?

Reply

Marsh Posté le 10-02-2003 à 07:51:15    

freeman_78 a écrit :

ça oki, ais je voudrais un truc de la forme :

Code :
  1. if( for(...)) ...


 
Mais bon ça c'est pas faisable, alors est-ce que en mettant le if dans le for ça fait la même chose ?

Ce genre d'imbrications n'est pas légal.


---------------
Le site de ma maman
Reply

Marsh Posté le 10-02-2003 à 08:27:21    

Ca d'accord j'avais vu que ça ne voulait pas se compiler :/
 
Mais comment pourais-je faire une structure équivalente et légale ... ?

Reply

Marsh Posté le 10-02-2003 à 08:51:31    

if interprète une séquence selon qu'elle est vraie ou fausse, auquel cas, if fait le branchement adéquat.
 
for itère bêtement sur le compteur de boucle.
 
Ni if, ni for ne retourne de valeurs. Il peut être utile de déclarer un booléen ou un entier suivant le cas, pour retenir un état du for utile pour le if et vice versa.
 
Il faut que tu dises ce que tu veux faire, car il y a de nombreuses manières de combiner les deux opérateurs. Sans plus de détails, je ne peux rien.


---------------
Le site de ma maman
Reply

Marsh Posté le 10-02-2003 à 08:55:35    

oki merci j'ai réussi à faire un truc :) :

Code :
  1. int testLignes(int n, double coefA[][10][10], double coefB[][10])
  2. {
  3. int j,i,compteur,retour;
  4. double coeffMultA,coeffMultB;
  5. retour = 1;
  6. compteur = 0;
  7. for(j=0 ; j<(n-1) ; j++)
  8. {
  9.  coeffMultB = coefB[j][0]/coefB[j+1][0];
  10.  for(i=0 ; i<n ; i++)
  11.  {
  12.   coeffMultA = coefA[i][j][0]/coefA[i][j+1][0];
  13.   if ( fabs(coeffMultA - coeffMultB) < 1.0e-50 )
  14.   {
  15.    compteur++;
  16.   }
  17.  }
  18.  if( compteur == n)
  19.  {
  20.   retour = 0;
  21.  }
  22.  compteur = 0;
  23. }
  24. return retour;
  25. }


 
Voilà donc ça teste après la fin de la boucle, du coup si la condition a été remplie à chaque itération, je peux retourner mon 0.

Reply

Marsh Posté le 10-02-2003 à 08:55:35   

Reply

Marsh Posté le 10-02-2003 à 09:50:23    

j'ai pas trop regardé ton code mais il me semble plus judicieux de quitter directement lorsque le premier test if ( fabs(coeffMultA - coeffMultB) < 1.0e-50 ) sera faux non ? car de toute façon tu retourneras alors 1...mais bon c lundi et j'ai pas envie de chercher trop  :D

Reply

Marsh Posté le 10-02-2003 à 10:02:41    

le truc c'est que le test est censé être tout le temps faux ... si il est vrai, c'est qu'il y a une erreur et c'est pour ça que cette fonction existe... dans l'absolu ça fonctionne correctement, mais si vous avez plus élégant et/ou plus efficace, je veux bien !! je suis un tout petit newbi ...  :)

Reply

Marsh Posté le 10-02-2003 à 10:18:53    

oui alors là il vaut mieux tout tester c'est clair  :D  

Reply

Marsh Posté le 11-02-2003 à 03:38:05    

Code :
  1. int testLignes(int n, double coefA[][10][10], double coefB[][10])
  2. {
  3. int i , j ;
  4. for(j=0 ; j<(n-1) ; j++)
  5. {
  6.  double coeffMultB = coefB[j][0]/coefB[j+1][0];
  7.  for(i=0 ; i<n ; i++)
  8.  {
  9.   double coeffMultA = coefA[i][j][0]/coefA[i][j+1][0];
  10.   if ( fabs(coeffMultA - coeffMultB) >= 1.0e-50 )
  11.    return 0; //faux et fin
  12.  }
  13. }
  14. return 1; //tout parcouru et vrai
  15. }


Il y a un return en plein milieu : c'est mal.
Le code est plus simple : c'est bien.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed