[ C ] Structure de if correct ?

Structure de if correct ? [ C ] - C++ - Programmation

Marsh Posté le 10-01-2003 à 16:09:21    

Est ce que cette structure est correcte pke mon prog a l air de prendre en compte que la derniere instruction apres le else, c est a dire qu il retourne toujours 4 comme valeurs quelque soit les valeurs de a , b, c.
Je suis desolé je ne suis qu un debutant, si vous pouviez me filer un coup de main ca serait sympa.
Merci par avance  :hello:  
(j espere que c pas trop moche l affichage du code)
 
 

Code :
  1. static double racineR1, racineR2, racineI1, racineI2, racineC1, racineC2, racineRDouble;
  2. static char valRetour;
  3. //definition de la fonction
  4. char calculDeux (double a , double b , double c )
  5. {
  6. double D;
  7. D=b*b-4*a*c;
  8. if(a==0)
  9. {
  10.  return -1;
  11.  //valRetour=-1;
  12.  printf("equation du premier degré\n" );
  13. }
  14. else
  15. {
  16.  if(D>0)
  17.  {
  18.   return 2;
  19.   //valRetour=2;
  20.   racineR1=(-b-sqrt(D))/(2*a);
  21.   racineR2=(-b+sqrt(D))/(2*a);
  22.  }
  23.  else
  24.  {
  25.   if(D==0)
  26.   {
  27.    return 3;
  28.    //valRetour=3;
  29.    racineRDouble=-b/2*a;
  30.   }
  31.   else
  32.   {
  33.    /*if(D<0 && b==0)
  34.    {*/
  35.     return 4;
  36.     //valRetour=4;
  37.     racineI1=-sqrt(D)/2*a;//ne pas oublier le i a l affichage
  38.     racineI2=sqrt(D)/2*a;//ne pas oublier le i a l affichage
  39.    }
  40.    /*else  
  41.    {
  42.     return 6;
  43.     //valRetour=6;
  44.     racineC1=racineRDouble+racineI1;
  45.     racineC2=racineRDouble+racineI2;
  46.    }*/
  47.   //}
  48.  }
  49. }
  50. }

Reply

Marsh Posté le 10-01-2003 à 16:09:21   

Reply

Marsh Posté le 10-01-2003 à 16:20:14    

à partir du moment ou tu fais un return, ta fonction retourne à l'appelant. donc toutes les instructions apres un return ne seront pas exécutés

Reply

Marsh Posté le 10-01-2003 à 16:23:10    

Ha bhe deja ca va m aider ca!!
Merci bocoup bocoup  :jap:

Reply

Marsh Posté le 10-01-2003 à 16:26:19    

quoique attend....
De toute facon si les instructions du if ne sont pas verifiés b1 il tient pas en compte le return qui est dedans donc il continue juska ce qui est une condition verifié...
Normalement ca devrait etre bon alors, moi g besoin qu il retourne qu une valeur de toute facon.

Reply

Marsh Posté le 10-01-2003 à 16:27:25    

je comprends bien: mais ne retourne une valeur qu'une fois que ton traitement est complet


Message édité par Taz le 10-01-2003 à 16:30:07
Reply

Marsh Posté le 10-01-2003 à 16:34:27    

Bon ok je vais revoir ca de toute facon ca va pas tres bien, je crois que je vais tous refaire.
Merci qd même pour ton aide  :jap:

Reply

Marsh Posté le 10-01-2003 à 16:49:38    

Salut,  
 
Un petit tuyau! Pour désactiver du code il vaut mieux utiliser #if 0, comme dans:
 

Code :
  1. void
  2.    example()
  3.    {
  4.       great looking code
  5. #if 0
  6.       lots of code
  7. #endif
  8.       more code
  9.     }


 
Si tu le fait avec des // ou des /* */ alors 9 fois sur 10 on perd les pédales...  
 
Bonne continuation. Avander


---------------
A thing of beauty is a joy forever (John Keats)
Reply

Marsh Posté le 10-01-2003 à 19:40:42    

Je sais pa si c'est ca, mais le "if (a == 0)" avec a qui n'est pas un entier, ca risque pas de poser problème :??:

Reply

Marsh Posté le 10-01-2003 à 19:43:40    

il vaut mieux effectivement 0.0 pour les doubles et 0.0f pour les float. (rappel: les types flottants sont un représentationb plus ou moins precise des nombrres réels, donc attention)

Reply

Marsh Posté le 11-01-2003 à 04:44:41    

Le test d'égalité marche mal avec les flottants. Cela s'applique à:

Code :
  1. if(D==0) ...
  2. if(fabs(D-0) < tolerance) ... //remplacement


Si tu fais des return, inutile de s'encombrer avec les else.

Code :
  1. char calculDeux (double a , double b , double c )
  2. {
  3. double D= b*b - 4*a*c;
  4. if(a==0)
  5. {
  6.  printf("equation du premier degré\n" );
  7.  return -1;
  8. }
  9. if(D>0 )
  10. {
  11.  racineR1=(-b-sqrt(D))/(2*a);
  12.  racineR2=(-b+sqrt(D))/(2*a);
  13.  return  2;
  14. }
  15. if(D==0)
  16. {
  17.  racineRDouble= -b/2*a;
  18.  return  3;
  19. }
  20. /*D<0*/
  21. racineI1= -sqrt(D)/2*a;
  22. racineI2=sqrt(D)/2*a;
  23. return  4;
  24. }


Ou même, en alignant:

Code :
  1. char calculDeux (double a , double b , double c )
  2. {
  3. double D= b*b - 4*a*c;
  4. if(a==0){ printf("equation du premier degré\n" );                    return -1; }
  5. if(D>0 ){ racineR1=(-b-sqrt(D))/(2*a); racineR2=(-b+sqrt(D))/(2*a); return  2; }
  6. if(D==0){               racineRDouble= -b/2*a;                      return  3; }
  7. /*D<0*/   racineI1= -sqrt(D)/2*a     ; racineI2=sqrt(D)/2*a       ; return  4;
  8. }


Il te reste à apprendre à ne pas utiliser de variables globales, à utiliser une énumération, une structure...


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