Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1591 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2154384
davidmarli
Posté le 27-08-2012 à 10:44:51  profilanswer
 

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.

mood
Publicité
Posté le 27-08-2012 à 10:44:51  profilanswer
 

n°2154439
rufo
Pas me confondre avec Lycos!
Posté le 27-08-2012 à 11:42:57  profilanswer
 

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
n°2154485
davidmarli
Posté le 27-08-2012 à 13:51:07  profilanswer
 

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 !

n°2154488
rufo
Pas me confondre avec Lycos!
Posté le 27-08-2012 à 14:02:51  profilanswer
 

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
n°2154614
davidmarli
Posté le 28-08-2012 à 08:57:22  profilanswer
 

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

n°2154653
rufo
Pas me confondre avec Lycos!
Posté le 28-08-2012 à 11:18:37  profilanswer
 

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
n°2154660
davidmarli
Posté le 28-08-2012 à 12:07:04  profilanswer
 

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.

n°2154680
theshockwa​ve
I work at a firm named Koslow
Posté le 28-08-2012 à 14:43:38  profilanswer
 

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
n°2154980
mrbebert
Posté le 29-08-2012 à 19:52:21  profilanswer
 

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.
n°2155031
rufo
Pas me confondre avec Lycos!
Posté le 30-08-2012 à 09:28:55  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

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

 

Sujets relatifs
[DELPHI] Composant affichant les dossiers d'une partition ?[Delphi] Enregistrement d'un ocx au démarrage de l'application
[DELPHI] Copier le contenu d'un panel dans un autre ?[DELPHI] Tlistview : surligner une ou plusieurs lignes ?
delphi, file Directory problem!![DELPHI] mettre un | dans un string !
[DELPHI] Lire les détails d'un fichier ?Utilisation d'AVX sous Delphi ?
[DELPHI] Créer une fenêtre de LOG ?PEAR ne veux pas m'installer de packages sur wamp ?
Plus de sujets relatifs à : [DELPHI] delphi ne veux plus faire une division ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR