[DELPHI] delphi ne veux plus faire une division ...

delphi ne veux plus faire une division ... [DELPHI] - Delphi/Pascal - Programmation

Marsh Posté le 27-08-2012 à 10:44:51    

Bonjour,
 
depuis hier, je deviens fou ..
J'ai delphi 2010 installé depuis longtemps.
Hier j'ai voulu rajouté un calcul dans une focntion. Attention hyper compliqué :  
 
var  den,num:integer;
      sar_orig:real;  
puis dans le code :  
sarorig:=num/den; (sachant que den n'est jamais nul, num et den ont bien des valeurs avant d'arriver sur cette ligne).
 
Bref, si j'éxécute le code, pas d'erreur annoncée, en revanche delphi n'execute jamais cette ligne là du code !!!
Si je mets un point d'arrêt, à la compilation, la ligne est barrée.
 
Bref, c'est moi qui devient fou ou bien ???
 
Si quelqu'un a une explication je suis preneur de suite.
 
Merci beaucoup.

Reply

Marsh Posté le 27-08-2012 à 10:44:51   

Reply

Marsh Posté le 27-08-2012 à 11:42:57    

Est-ce que ça viendrait pas du fait d'un pb de type. Tu divises 2 integer dont le résultat est mis dans un real. En géral, quand le dénominateur est un integer, la division se fait en integer et non en real... Du coup, ton résultat est faux :
Ex : 1/2   -> tu te retrouves avec 0 et non 0.5.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 27-08-2012 à 13:51:07    

ben non, justement en utilisant le / c'est bien une division décimale et non une division euclidienne ?
De toute les façons, cela n'explique pas pourquoi delphi n'évalue pas cette ligne !

Reply

Marsh Posté le 27-08-2012 à 14:02:51    

ca fait un moment que j'ai pas refait de Delphi. Mais en C ou en PHP, si tu mets un integer au dénominateur, le résultat de la division est un integer, donc la division euclidienne. Pour forcer le division décimale, il faut caster le dénominateur. Si ta ligne n'est pas évaluée, c'est peut-être parce que Delphi veut t'avertir que l'opération risque de mal se passer...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 28-08-2012 à 08:57:22    

Non, delphi n'est pas crétin : il sait ce qu'est une division !!!  
Ce que tu me dis sur le C me fait un peu peur. Etant prof de maths, je dois dire que je suis même un peu scandalisé  : une division est une division. Si le diviseur est entier il n'y a pas de raison que la division s'arrête sur la partie entière du quotient, à moins de l'avoir demandé explicitement avec un autre opérateur que "/" (div par exemple). Mais dans ce cas, on demande bien le quotient dans LA DIVISION EUCLIDIENNE de nos deux entiers !
Bref, le pb n'est pas là. En delphi un quotient "/" entre deux entiers est forcément (comme en maths) un nombre réel.
 
Si quelqu'un a une réponse ...

Reply

Marsh Posté le 28-08-2012 à 11:18:37    

Ce n'est pas une question que Delphi soit idiot ou pas mais tu n'as pas l'air très au courant des pbs de cast et de transtypage inhérents à un certain nb de langages de dév (tout particulièrement le C/C++)...
 
Est-ce que tu as juste fait le test en changeant le type des 2 nb déclarés en integer et les mettre en real pour voir si le pb subsistait? Ca permettrait au moins d'écarter la piste des pb de typages...


Message édité par rufo le 28-08-2012 à 11:19:18

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 28-08-2012 à 12:07:04    

a l'instant oui, le pb est le même !!!!
Donc là... je sèche.
 
Pour le transtypage, oui je sais bien, mais d'un poitn de vu maths, cela paraît anormal. D'un point de vu info je comprends bien le pb.

Reply

Marsh Posté le 28-08-2012 à 14:43:38    

davidmarli a écrit :

Bonjour,
 
depuis hier, je deviens fou ..
J'ai delphi 2010 installé depuis longtemps.
Hier j'ai voulu rajouté un calcul dans une focntion. Attention hyper compliqué :  
 
var  den,num:integer;
      sar_orig:real;  
puis dans le code :  
sarorig:=num/den; (sachant que den n'est jamais nul, num et den ont bien des valeurs avant d'arriver sur cette ligne).
 
Bref, si j'éxécute le code, pas d'erreur annoncée, en revanche delphi n'execute jamais cette ligne là du code !!!
Si je mets un point d'arrêt, à la compilation, la ligne est barrée.
 
Bref, c'est moi qui devient fou ou bien ???
 
Si quelqu'un a une explication je suis preneur de suite.
 
Merci beaucoup.


 
Effectivement, ce point là est surprenant.
Deux choses au moins à vérifier.
* Est-ce que le binaire que tu débugges a bien été recompilé suite à cette modification ?
* Est-ce que, pour une raison spécifique (au mieux : la variable n'est pas utilisée à cause d'une typo ou quelque chose du genre, au pire, tu t'appuyes sur un comportement indéfini du langage) ton compilateur pourrait penser que cette opération n'est pas utile ? Ca peut facilement se vérifier en compilant sans optimisation en toute logique.
 


Message édité par theshockwave le 28-08-2012 à 14:44:26

---------------
last.fm
Reply

Marsh Posté le 29-08-2012 à 19:52:21    

Bonne piste [:figti]  
"Delphi n'exécute pas cette ligne", qu'est-ce que ça signifie ? La variable sarorig ne reçoit pas le résultat attendu ?
 
Dans le code initial, on a :

Code :
  1. var  den,num:integer;
  2.       sar_orig:real; 
  3. puis dans le code : 
  4. sarorig:=num/den;

C'est sar_orig ou sarorig, le nom de la variable ?
Si une variable n'est pas utilisée dans la suite du code, je ne trouverais pas anormal que le compilateur supprime l'opération qui l'initialise :)


Message édité par mrbebert le 29-08-2012 à 19:52:51

---------------
Doucement le matin, pas trop vite le soir.
Reply

Marsh Posté le 30-08-2012 à 09:28:55    

J'avais pas vu ce _ qui traine... Cela dit, si sarorig n'est pas déclaré, le compilo devrait interrompre la compilation et indiquer qu'une variable n'est pas définie.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

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