[#C] Problème divisions parties décimales

pekzy -  
 pekzy -
Bonjour, je debute en C, je n'arrive pas à comprendre pourquoi mon programme ne fonctionne pas :

// déclaration des variables

double nombre1 = 0;
double nombre2 = 0;
double resultat = 0;

// on entre les nombres 1 et 2
printf("nombre1 = ");
scanf("%d", &nombre1);
printf("nombre2 = ");
scanf("%d", &nombre2);

// calcul de la division

resultat = nombre1 / nombre2;
printf("%d / %d = %d \n", nombre1, nombre2, resultat);

------------------------------------------------------------------

5 / 2 = 2;

Comment je pourrais avoir le reste de ma partie décimale?



7 réponses

nicocorico Messages postés 799 Date d'inscription   Statut Membre Dernière intervention   138
 
Ha oui, c'est juste que tu veux afficher les décimales, je connais quasi rien au c, mais je crois qu'il suffit de modifier l'option d'affichage du PrintF...
Je pense que ça doit marcher comme ça, en remplaçant le d par f :

printf("%d / %d = %f \n", nombre1, nombre2, resultat);
1
nicocorico Messages postés 799 Date d'inscription   Statut Membre Dernière intervention   138
 
Le reste d'une division est obtenu par modulo, qui s'écrit %, donc il te suffit de calculer : resultat = nombre1 % nombre2...
0
pekzy
 
Après correction :

// déclaration des variables
int nombre1 = 0;
int nombre2 = 0;
int resultat = 0;
int reste = 0;

// on entre les nombres 1 et 2
printf("nombre1 = ");
scanf("%d", &nombre1);
printf("nombre2 = ");
scanf("%d", &nombre2);


// calcul division + reste
resultat = nombre1 / nombre2;
reste = nombre1 % nombre2;
printf("%d / %d = %d,%d \n", nombre1, nombre2, resultat, reste);
------------------------------------------------------------------------------
5 / 2 = 2,1 (au lieu de 2,5)
0
pekzy
 
Up !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Non le %f c'est pour les types float, alors que le résultat est entier donc c'est bien %d.
Le problème n'est pas de l'ordre de la programmation mais des maths (de CE2 !)

Quand tu fais nombre1%nombre2 ça n'a jamais correspondu au nombre de chiffres après la virgules mais au reste de la division !

Si tu as 5 / 2 il est tout à fait normal d'avoir 2 pour quotient et 1 pour reste.
On vérifies ainsi l'égalité 5 = 2*2+1.

Pour obtenir le 0,5 qui correspond il faudrait faire le calcul 1/2 c'est à dire :
(double) (nombre1%nombre2)/nombre2
La confiance n'exclut pas le contrôle
0
nicocorico Messages postés 799 Date d'inscription   Statut Membre Dernière intervention   138
 
oui bien sûr, pekzy à mal compris le sens du mot 'reste', mais il n'y a pas moyen d'afficher directement la partie décimale avec PrintF ?
Et la variable résultat est de type Double...
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
C'est printf sans majuscule (le C est sensible à la casse)
Et si, on peut directement afficher la division réelle :

printf("%d/%d=%lf",nombre1,nombre2, (double) nombre1/nombre2);
0
nicocorico Messages postés 799 Date d'inscription   Statut Membre Dernière intervention   138
 
^^ je crois que c'est ça que pekzy cherchait...
0
pekzy
 
Merci !
Après mettre renseigné,
il y a une différence entre le scanf et le printf pour afficher les décimales.

-----------------------------------------

double nombre1 = 0;

scanf("%lf", &nombre1);

printf("un nombre décimal : %f", nombre1);

--------------------------------------

scanf : on utilise "%lf"
printf : on utilise "%f"

désolé pour la confusion reste, décimal.
Je vais aller réviser un peut mes Maths moi.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
%f c'est pour les types float, %lf pour les types double.
dans ton exemple tu utilises double donc printf doit bien être %lf
Remarque : il y en a également d'autres %e par exemple pour la notation scientifique, ou alors en faisant des dérivées comme %.3lf pour n'afficher que 3 chiffres après la virgule...
0
pekzy
 
Merci !
0