N'arrive pas à faire un calcul en c++

N'arrive pas à faire un calcul en c++ - C++ - Programmation

Marsh Posté le 04-07-2005 à 18:29:13    

Bonsoir,
voila mon problème, je programme sous borland c++ builder, et je n'arrive pas à faire marcher un calcul, voici le code:

Code :
  1. if ((dev==0)||((dev==1)&&(atan(pte)*180/PI<=45))) {
  2.         switch(nbre_face_feu){
  3.                 case'1':epf=ep-dxf*tf*0;htf=ht-dxf*tf*1.6;break;
  4.                 case'2':epf=ep-dxf*tf*1;htf=ht-dxf*tf*1.6;break;
  5.                 case'3':epf=ep-dxf*tf*2;htf=ht-dxf*tf*1.6;break;
  6.                 case'4':epf=ep-dxf*tf*2;htf=ht-dxf*tf*2.3;break;
  7.                 }
  8.                 }
  9. if ((dev==1)&&(atan(pte)*180/PI>45)) {
  10.         switch(nbre_face_feu){
  11.                 case'1':epf=ep-dxf*tf*0;htf=ht-dxf*tf*1;break;
  12.                 case'2':epf=ep-dxf*tf*1.6;htf=ht-dxf*tf*1;break;
  13.                 case'3':epf=ep-dxf*tf*2.3;htf=ht-dxf*tf*1;break;
  14.                 case'4':epf=ep-dxf*tf*2.3;htf=ht-dxf*tf*2;break;
  15.                 }
  16.                 }
  17. cxyfn=(1.1*cxcp+0.8*cxsn)*ep*ep/epf/epf+(1.1*cycp+0.8*cysn)*ht*ht/htf/htf;
  18. cxyfv=(1.1*cxcp+0.8*cxsv)*ep*ep/epf/epf+(1.1*cycp+0.8*cysv)*ht*ht/htf/htf;


arrivé au deux dernière ligne, le programme plante pour cause de division par zéro. Il n'enregistre pas les variable epf et htf.
 
Merci de m'aider
DorianHawkmoon

Reply

Marsh Posté le 04-07-2005 à 18:29:13   

Reply

Marsh Posté le 04-07-2005 à 19:00:40    

t'as qu'à pas faire de division par 0. Et aère un peut ton code.

Reply

Marsh Posté le 04-07-2005 à 19:01:22    

dorianhawkmoon a écrit :

Bonsoir,
voila mon problème, je programme sous borland c++ builder, et je n'arrive pas à faire marcher un calcul, voici le code:

Code :
  1. if ((dev==0)||((dev==1)&&(atan(pte)*180/PI<=45))) {
  2.         switch(nbre_face_feu){
  3.                 case'1':
  4.                   epf=ep-dxf*tf*0; // heu 0*qch = 0 ;)
  5.                   htf=ht-dxf*tf*1.6;
  6.                   break;
  7.                 case'2':epf=ep-dxf*tf*1;htf=ht-dxf*tf*1.6;break;
  8.                 case'3':epf=ep-dxf*tf*2;htf=ht-dxf*tf*1.6;break;
  9.                 case'4':epf=ep-dxf*tf*2;htf=ht-dxf*tf*2.3;break;
  10.                 }
  11.                 }
  12. if ((dev==1)&&(atan(pte)*180/PI>45)) {
  13.         switch(nbre_face_feu){
  14.                 case'1':
  15.                     epf=ep-dxf*tf*0; // idem
  16.                     htf=ht-dxf*tf*1;
  17.                     break;
  18.                 case'2':epf=ep-dxf*tf*1.6;htf=ht-dxf*tf*1;break;
  19.                 case'3':epf=ep-dxf*tf*2.3;htf=ht-dxf*tf*1;break;
  20.                 case'4':epf=ep-dxf*tf*2.3;htf=ht-dxf*tf*2;break;
  21.                 }
  22.                 }
  23. cxyfn=(1.1*cxcp+0.8*cxsn)*ep*ep/epf/epf+(1.1*cycp+0.8*cysn)*ht*ht/htf/htf;
  24. cxyfv=(1.1*cxcp+0.8*cxsv)*ep*ep/epf/epf+(1.1*cycp+0.8*cysv)*ht*ht/htf/htf;


arrivé au deux dernière ligne, le programme plante pour cause de division par zéro. Il n'enregistre pas les variable epf et htf.
 
Merci de m'aider
DorianHawkmoon


 
Oui aère ton code et puis les divisuer peuvent très bien etre égale à 0 de plus ton programme (enfin les switch ne font rien si tes entier sont différent de 1, 2 , 3 ou 4 : ne te manque t il pas des default ?


Message édité par LordHarryPotter le 04-07-2005 à 19:03:35
Reply

Marsh Posté le 04-07-2005 à 19:05:31    

je pense qu'il faudrait un peu plus de détail sur les variables (types valeurs) de ton prog si tu veux de l'aide, paske là...
 
a priori soit epf = 0 soit hpf = 0  :bounce: merci qui ?

Reply

Marsh Posté le 04-07-2005 à 19:06:57    

moi je dis que c'est les case qui sont foireux et résultat, par hasard epf et hpf sont à 0

Reply

Marsh Posté le 04-07-2005 à 19:11:55    

ep = 0 peut etre?

Reply

Marsh Posté le 04-07-2005 à 21:33:21    

(atan(pte)*180/PI<=45)) c'est bon ? Pas de pb à mélanger float/double et entier (45) pour la comparaison ?
 
nbre_face_feu, il peut prendre quelles valeurs ? 1, 2, 3, 4 seulement ?

Reply

Marsh Posté le 05-07-2005 à 08:10:21    

nbre_face_feu ne peu prendre que 1,2,3ou 4.
les variabbles sont toutes de type float, sauf dev qui est un int qui ne prend les valeur que 1,2 ou 3 -la partie 3 n'est pas présente-.
j'ai aussi essayé en utilisant des if à la place des switch case, mais ca ne marche pas non plus...

Reply

Marsh Posté le 05-07-2005 à 09:28:30    

'1', '2' ...
 
fout un default a tes switch et regarde ce qu'il se passe.

Reply

Marsh Posté le 05-07-2005 à 09:40:32    

utilise le débugueur ou des cout, ou des print pour voir où va ton programme

Reply

Marsh Posté le 05-07-2005 à 09:40:32   

Reply

Marsh Posté le 05-07-2005 à 16:43:11    

J'ai rajouter un default, et ca marche.
Merci beaucoup Taz ^______^

Reply

Marsh Posté le 05-07-2005 à 18:02:03    

donc tout passe dans ton default ... vire le switch alors ..

Reply

Sujets relatifs:

Leave a Replay

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