[#C] Problème divisions parties décimales
pekzy
-
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?
// 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?
A voir également:
- [#C] Problème divisions parties décimales
- Diviser une image en plusieurs parties instagram - Guide
- 2 décimales après la virgule excel ✓ - Forum Programmation
- Tableau vierge pour concours de pétanque en 4 parties - Forum compta / gestion
- Diviser une image en plusieurs parties photoshop - Forum Graphisme
- Faire 4 tirages aléatoires sur Excel - Forum Excel
7 réponses
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);
Je pense que ça doit marcher comme ça, en remplaçant le d par f :
printf("%d / %d = %f \n", nombre1, nombre2, resultat);
Le reste d'une division est obtenu par modulo, qui s'écrit %, donc il te suffit de calculer : resultat = nombre1 % nombre2...
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)
// 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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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...
Et la variable résultat est de type Double...
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.
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.
%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...
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...