[Résolu] Problème de division

Problème de division [Résolu] - C - Programmation

Marsh Posté le 24-09-2005 à 16:13:08    

Salut à tous !
 
Voilà je commence peine à me lancer dans le langage C (avec une très bonne connaissance du PHP, ce qui est plutot avantageux ;) ) et j'ai un petit problème de variables avec une division.
 

Code :
  1. int a;
  2. float division;
  3. int racine;
  4. int nb;
  5. a = 5;
  6. racine = sqrt(a); //Il va donc transformer la racine carrée de 5 en un entier (2)
  7. nb = 9;
  8. division = racine/nb; // Divise 2 par 9
  9. printf ("%d", division); //Il m'affiche 0 !!!


 
Que je sache, 2/9 ca fait bien 0,22222222... lol donc si on pouvait m'expliquer d'où vient l'erreur ca m'aiderai beaucoup ;)
Je précise que si j'affiche la variable racine, j'obtient comme prévu 2...
 
Bonne soirée ;)


Message édité par kmeleon1 le 24-09-2005 à 17:10:25
Reply

Marsh Posté le 24-09-2005 à 16:13:08   

Reply

Marsh Posté le 24-09-2005 à 16:21:53    

Numérateur et dénominateur sont entiers, donc la division entiere est utilisée.

Reply

Marsh Posté le 24-09-2005 à 16:29:01    

Alors comment demander un nombre à virgule ??? J'essaie de transformer racine et nb en float, mais ca marche pas non plus :'(

Reply

Marsh Posté le 24-09-2005 à 16:45:12    

Il faut modifier ton printf pour afficher un float : %d c'est pour les entiers, %f pour les floats.

Reply

Marsh Posté le 24-09-2005 à 16:52:28    

Je me suis mal exprimé, en fait mon calcul veut déterminer ceci:
 

Code :
  1. int a;
  2. float division;
  3. int racine;
  4. int nb;
  5. int verif;
  6. a = 5;
  7. racine = sqrt(a); //Il va donc transformer la racine carrée de 5 en un entier (2)
  8. nb = 9;
  9. division = racine/nb; // Divise 2 par 9
  10. verif = (int) division; // C'est le seul moyen que j'ai trouvé pour  
  11. if (verif == division){ // savoir si un nombre était entier ou pas
  12.    .....
  13. }


 
Donc je veut vérifier si la division est entière...
Je me perd dans tous ces types de variables moi !!!( c'était plus facile en php :'( )
 
 

Reply

Marsh Posté le 24-09-2005 à 17:09:58    

Problème résolu (mais c'est de la bidouille):
 

Code :
  1. division = ((float)racine/(float)nb);


 
Voilà bonne soirée ;)

Reply

Marsh Posté le 24-09-2005 à 17:13:57    

Code :
  1. int a,b;
  2. float d;
  3. a=2;
  4. b=9;
  5. d = a/b;
  6. printf("%f", d);              // ----> d == 0.0f
  7. d = (float)(a)/b;
  8. printf("%f", d);              // ----> d == 0.2222222f

Reply

Marsh Posté le 24-09-2005 à 17:17:24    

Ca n'a rien d'une bidouille. L'opérateur de division existe en deux versions, une pour les entiers, une pour les floatants.  
 
Si numérateur et dénominateur sont entiers (on parle du type de données, pas de la valeur; 2.0f est  floatant), alors c'est la division entiere qui est utilisée. 2/9 = 0*9 + 2, donc 0.  
 
Si numérateur et/ou dénominateur est floatant, c'est la division floatante qui est utilisée. 2.0f/9 = 0.222222222f

Reply

Sujets relatifs:

Leave a Replay

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