switch...

switch... - C++ - Programmation

Marsh Posté le 13-06-2006 à 17:07:00    

bonjour,  
 
j'ai un petit souci avec le codage d'un switch, je sais c'est bateau, mais j'ai du mal....
voici mon code:
 
 

Code :
  1. UpdateData(true);
  2. m_Alfa=m_Coef_Flou.GetCurSel();
  3. switch(m_Alfa)
  4. {
  5. case 0 :
  6.  m_Alfa = 0.1;
  7. case 1 :
  8.  m_Alfa = 0.2;
  9. case 2 :
  10.  m_Alfa = 0.3;
  11. case 3 :
  12.  m_Alfa = 0.4;
  13. case 4 :
  14.  m_Alfa = 0.5;
  15. case 5 :
  16.  m_Alfa = 0.6;
  17. case 6 :
  18.  m_Alfa = 0.7;
  19. case 7 :
  20.  m_Alfa = 0.8;
  21. case 8 :
  22.  m_Alfa = 0.9;
  23. }
  24. UpdateData(false);


 
Sachant que j'essaie d'utiliser une combo box, et d'en récupérer les valeurs....
m_Coef_Flou est ma combo box, et m_Alfa est ma variable qui va contenir la valeur sélectionnée dans ma combo box
 
merci pour votre aide

Reply

Marsh Posté le 13-06-2006 à 17:07:00   

Reply

Marsh Posté le 13-06-2006 à 17:09:51    

c'est quoi qui va pas ?

Reply

Marsh Posté le 13-06-2006 à 17:13:02    

baleine2 a écrit :

bonjour,  
 
j'ai un petit souci avec le codage d'un switch, je sais c'est bateau, mais j'ai du mal....
voici mon code:
 
 

Code :
  1. UpdateData(true);
  2. m_Alfa=m_Coef_Flou.GetCurSel();
  3. switch(m_Alfa)
  4. {
  5. case 0 :
  6.  m_Alfa = 0.1;
  7. case 1 :
  8.  m_Alfa = 0.2;
  9. case 2 :
  10.  m_Alfa = 0.3;
  11. case 3 :
  12.  m_Alfa = 0.4;
  13. case 4 :
  14.  m_Alfa = 0.5;
  15. case 5 :
  16.  m_Alfa = 0.6;
  17. case 6 :
  18.  m_Alfa = 0.7;
  19. case 7 :
  20.  m_Alfa = 0.8;
  21. case 8 :
  22.  m_Alfa = 0.9;
  23. }
  24. UpdateData(false);


 
Sachant que j'essaie d'utiliser une combo box, et d'en récupérer les valeurs....
m_Coef_Flou est ma combo box, et m_Alfa est ma variable qui va contenir la valeur sélectionnée dans ma combo box
 
merci pour votre aide


C'est quoi l'intérêt d'un switch là?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 13-06-2006 à 17:17:12    

Code :
  1. m_Alfa = 0.1 + m_Alfa/10.0;

[:petrus75]
 
et de toutes façon il manque les break dans le switch


Message édité par SomeBugsInMe le 13-06-2006 à 17:17:56
Reply

Marsh Posté le 13-06-2006 à 17:18:44    

mets des 'break' à la fin de chaque cas.
 
sinon, Masklinn a raison : il n'est pas très intéressant de mettre un switch : tu pourrais avantageusement remplacer tout ça par m_alfa = 0.1*(m_alfa+1.)
 
EDIT: grillé

Message cité 1 fois
Message édité par franceso le 13-06-2006 à 17:19:45

---------------
TriScale innov
Reply

Marsh Posté le 13-06-2006 à 17:45:25    

Merci pour toutes vos réponses, c'est cool, je prend note de vos remarques.

Reply

Marsh Posté le 13-06-2006 à 18:47:28    

C'est un topic typiquement C, pas C++ !!!


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 14-06-2006 à 00:13:03    

Ouais, bon, tout le monde ne passe pas forcement par le C non plus, hein?

Reply

Marsh Posté le 14-06-2006 à 17:37:03    

franceso a écrit :

tu pourrais avantageusement remplacer tout ça par m_alfa = 0.1*(m_alfa+1.)


Dommage de faire l'addition de deux "int" en précision "double" => vaut mieux écrire m_alfa = 0.1*(m_alfa+1)

Message cité 2 fois
Message édité par Sve@r le 14-06-2006 à 17:37:50

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 14-06-2006 à 19:53:02    

Sve@r a écrit :

Dommage de faire l'addition de deux "int" en précision "double" => vaut mieux écrire m_alfa = 0.1*(m_alfa+1)


 
et meme (vu que m_alfa est affecté par une expression dans laquelle il intervient)
m_alfa = 0.1 * ++m_alfa;
pour eviter la creation d'un temp

Reply

Marsh Posté le 14-06-2006 à 19:53:02   

Reply

Marsh Posté le 14-06-2006 à 20:18:34    

skelter a écrit :

et meme (vu que m_alfa est affecté par une expression dans laquelle il intervient)
m_alfa = 0.1 * ++m_alfa;
pour eviter la creation d'un temp


Ce genre de conneries c'est le meilleur moyen de se préparer des bugs planqués [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 14-06-2006 à 20:21:02    

Sve@r a écrit :

Dommage de faire l'addition de deux "int" en précision "double" => vaut mieux écrire m_alfa = 0.1*(m_alfa+1)


?
m_alpha est probablement un flotant. C'est alors 1 (de type int) qui est converti en un flotant du type de m_alpha.

Reply

Marsh Posté le 14-06-2006 à 20:22:39    

skelter a écrit :

et meme (vu que m_alfa est affecté par une expression dans laquelle il intervient)
m_alfa = 0.1 * ++m_alfa;
pour eviter la creation d'un temp


m_alpha est un entier ? (peu de chance)
 
edit: bof, même si m_alpha était un entier, ça ne changerait pas grand chose pour l'optimiseur.

Message cité 1 fois
Message édité par ++fab le 14-06-2006 à 20:30:17
Reply

Marsh Posté le 14-06-2006 à 20:29:15    

++fab a écrit :

m_alpha est un entier ? (peu de chance)


 
oui c'est sans doute un reel, j'avais pas vu le source original

Reply

Marsh Posté le 14-06-2006 à 20:34:30    

masklinn a écrit :

Ce genre de conneries c'est le meilleur moyen de se préparer des bugs planqués [:pingouino]


 
c'est surtout pas tres coherent, j'ai fait ca vite fais sans meme voir m_alpha est reel, mais connerie ou pas si je veux incrementer m_alpha puis le diviser par 10, je fais comme ca
m_alpha += 1;
m_alpha /= 10;

Reply

Marsh Posté le 14-06-2006 à 20:35:04    

En même temps on fait rarement un switch avec un réel surtout si on le compare avec des entiers.

Reply

Marsh Posté le 14-06-2006 à 20:39:33    

:D bien vu !

Reply

Marsh Posté le 14-06-2006 à 20:42:51    

skelter a écrit :

mais connerie ou pas si je veux incrementer m_alpha puis le diviser par 10, je fais comme ca
m_alpha += 1;
m_alpha /= 10;


Moi aussi. Pas forcément pour faciliter la tache à l'optimiseur, mais plutot pour être le plus portable possible en ce qui concerne la précision numérique (l'ordre d'évaluation des paramètres est dépendant de l'implémentation, et cela affecte souvent la précision numérique lorsuqe l'on change d'implémentation).

Reply

Marsh Posté le 14-06-2006 à 20:51:18    

l'ordre d'evaluation depend de l'implementation mais j'ai du mal a imaginer comment ca pourrait influencer sur la precision. t'aurais pas un exemple ?

Reply

Marsh Posté le 14-06-2006 à 21:08:01    

Je pense à ceci :
 

Code :
  1. assert( std::numeric_limits<float>::digits10 == 6 );
  2. float f = 10 000f + 1f + 10 000 000f ;


 
ça, c'est plus sur :

Code :
  1. float f = 10000f + 1f;
  2. f += 10000000f;


Reply

Marsh Posté le 14-06-2006 à 21:20:28    

merci, d'ailleur a propos de ce que j'ai mis plus haut
m_alfa = 0.1 * ++m_alfa;
 
c'est un UB

Reply

Marsh Posté le 14-06-2006 à 23:51:26    

UB comme *Unspecified* Behaviour

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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