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

Fermé
pekzy - 24 sept. 2011 à 09:54
 pekzy - 25 sept. 2011 à 18:06
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 dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
Modifié par nicocorico le 25/09/2011 à 17:19
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 dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
24 sept. 2011 à 10:16
Le reste d'une division est obtenu par modulo, qui s'écrit %, donc il te suffit de calculer : resultat = nombre1 % nombre2...
0
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
Up !
0

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

Posez votre question
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
Modifié par KX le 25/09/2011 à 17:47
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 dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
Modifié par nicocorico le 25/09/2011 à 17:51
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 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
25 sept. 2011 à 17:53
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 dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
25 sept. 2011 à 17:59
^^ je crois que c'est ça que pekzy cherchait...
0
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 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
25 sept. 2011 à 18:00
%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
Merci !
0