1 divisé par 2 = 0? ça m'etonnerai!

panda_sem Messages postés 2 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 15 décembre 2004 - 15 déc. 2004 à 13:10
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 8 août 2005 à 22:59
Ben voila j'ai programmé une calculette qui peut additionner, multiplier, soustraire et diviser. Mais le problème c'est que lorsque je fais une division et que le resutat contient des décimale ben il arrondit a l'unité la plus proche par ex. 7 divisé par 2 = 3.5 et le programme affiche 7/2=3. Pourquoi ça fait ça? (J'ai commencé le c++ ya 3 jours au cas ou)

voila le code:
#include <cstdlib>
#include 

using namespace std;

 int operation() 
{
     int a;   // Declaration de la variable du chiffre a
     int b;   // Declaration de la variable du chiffre b
     int operation;
     char motop; 
/* Declaration de la variable de l'operateur mathématique (juste pour l'affichage du resultat) */
      
     // Choix de l'operation
     cout<<"choisissez le type d'operation a effectuer:\n"; 
     cout<<"1 = addition\n";
     cout<<"2 = soustraction\n";
     cout<<"3 = multiplication\n";
     cout<<"4 = division\n";
     cin>> operation;

     
     cout<<"entrez le nombre a: \n";
     cin >> a;
     cout<<"entrez le nombre b: \n";
     cin >> b;

     int resultat; // Déclaration de la variable du resultat

 /* Si l'operation selectionné est 1 ce sera une addition, si c'est 2 ce sera une soustraction, si c'est 3 une mutiplication, si c'est 4 une division */

     if(operation==1)
     {
       resultat = a+b;
       motop = '+';
     }
     else if(operation==2)
     {
          resultat = a-b;
          motop = '-';
     }
     else if(operation==3)
     {
          resultat = a*b;
          motop = 'x';
     }
     else if(operation==4)
     {
          resultat=a/b;
          motop= '/';
     }
     
     // affichage du resultat 

     cout<>buf; // Pour pas que l'application quitte toute seule
    
}

7 réponses

Helau Messages postés 38 Date d'inscription vendredi 2 mai 2003 Statut Membre Dernière intervention 25 août 2005
15 déc. 2004 à 13:49
Tout simplement parce qu'un int divisé par un int, te donne un int en resultat.

Et la division entière de 7 par 2, c bien 3.
Et 1 divisé par 2, ça fait bien 0.

Il faut donc que tu dises que ton résultat est flottant.
De plus, ta variable resultat étant déclarée en int, tu n'auras jamais de résultat à virgule.

A+.
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
15 déc. 2004 à 16:54
il faut caster un eds opérande en float et récupérer le résultat dand un float

int a = 7;
int b = 2;
float res = (float)a/b;

attention faire float res = a/b; ne suffit pas car la division sera fait avec des entiers et le résultat entier sera mis dans un float.
0
panda_sem Messages postés 2 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 15 décembre 2004
15 déc. 2004 à 18:52
Merci de vos réponses voila comment j'ai fais:

float a;
float b;
float resultat;

j'ai mis les nombres a entrer en float aussi comme ca on peut entrer des nb a virgules dans le dividende et le diviseur
0
Helau Messages postés 38 Date d'inscription vendredi 2 mai 2003 Statut Membre Dernière intervention 25 août 2005
16 déc. 2004 à 08:44
Si c'est ok, tu devrais mettre "réponse acceptée".

Bye.
Helau.
0

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

Posez votre question
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
17 déc. 2004 à 14:02
ui
évidemment un pb de types de variables

++
Magic Nono: l'informagicien! 8-)

PS valide comme l'a suggéré Helau
0
equimose Messages postés 65 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 17 avril 2009
8 août 2005 à 22:08
voila ce que j'ai constater


float a=(
float)1/(
float)2; /////a=0.5

ou

float a=1.0/2.0 ; /// a=0.5

alors que :
float a=1/2; ///a=0

Ba la je croi qu'il faut s'y faire
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
8 août 2005 à 22:59
rien de magique là dedans

le sys essaie tjs de faire au mieux

il voit 1 ou 2 , pr lui c'est un entier

si il voit 1. 1.0 ou .2 pr lui c'est un nb a virgule

et pr savoir ds quel domaine faire le rsltt des opérations, il regarde les 2 membres à opérer... et prend le plus grd des deux

dc si il a 2 entiers, il donnera un entier
et 0.5 tronqué ça donne 0

ça va comme ça?

___________________________________________________________
Magicalement
Nono
0
Rejoignez-nous