[#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

  1. nicocorico Messages postés 846 Statut Membre 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
  2. nicocorico Messages postés 846 Statut Membre 138
     
    Le reste d'une division est obtenu par modulo, qui s'écrit %, donc il te suffit de calculer : resultat = nombre1 % nombre2...
    0
  3. 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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. KX Messages postés 19031 Statut Modérateur 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
  6. nicocorico Messages postés 846 Statut Membre 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
    1. KX Messages postés 19031 Statut Modérateur 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
    2. nicocorico Messages postés 846 Statut Membre 138
       
      ^^ je crois que c'est ça que pekzy cherchait...
      0
  7. 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
    1. KX Messages postés 19031 Statut Modérateur 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
    2. pekzy
       
      Merci !
      0