begin process at 2012 05 29 03:10:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

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


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

mercredi 15 décembre 2004 à 13:10:27 | 1 divisé par 2 = 0? ça m'etonnerai!

panda_sem

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 <iostream>

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<<a<<motop<<b<<"="<<resultat<<"\n\n";

return (resultat);

}


int main(int argc, char *argv[])
{
int buf; // Variable servant plus tard
operation();
cout<<"Appuyer sur une touche pour quitter!";
cin>>buf; // Pour pas que l'application quitte toute seule

}

mercredi 15 décembre 2004 à 13:49:52 | Re : 1 divisé par 2 = 0? ça m'etonnerai!

Helau

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+.


mercredi 15 décembre 2004 à 16:54:59 | Re : 1 divisé par 2 = 0? ça m'etonnerai!

ymca2003

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.
mercredi 15 décembre 2004 à 18:52:06 | Re : 1 divisé par 2 = 0? ça m'etonnerai!

panda_sem

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
jeudi 16 décembre 2004 à 08:44:23 | Re : 1 divisé par 2 = 0? ça m'etonnerai!

Helau

Si c'est ok, tu devrais mettre "réponse acceptée".

Bye.
Helau.
vendredi 17 décembre 2004 à 14:02:15 | Re : 1 divisé par 2 = 0? ça m'etonnerai!

magic_Nono

Membre Club
ui
évidemment un pb de types de variables

++
Magic Nono: l'informagicien!

PS valide comme l'a suggéré Helau
lundi 8 août 2005 à 22:08:51 | Re : 1 divisé par 2 = 0? ça m'etonnerai!

equimose

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

lundi 8 août 2005 à 22:59:01 | Re : 1 divisé par 2 = 0? ça m'etonnerai!

magic_Nono

Membre Club
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


Cette discussion est classée dans : variable, int, resultat, operation, motop


Répondre à ce message

Sujets en rapport avec ce message

int to char ! [ par nullspace ] Voila mon problème !J'ai une résultat sous forme de variable INT, et je veux que ce résultat soit affecté à une variable de type CHAR.Genre, si j'ai 6 Variable int sur le disque... [ par nullspace ] Je cherche à enregistrer et lire sur le disque par ofstream et ifstream à partir de variables de type int.Seulement il m'écrit sous format texte.En vb int => chaine de caractères ? [ par kjus ] vala, il me faudrait transformer une variable int en chaine de caractère.Y a-t-il une fonction toute faite ?en fait, mon but est de l'inscrire dans un Argument argv[] en (int) [ par thebigbang ] Bonjour,Je cherche comment récupérer une variable entière à partir de la cette fonction main() :int main(int argc, char * argv[] ){...return 0;}Je vou équation et tableaux [ par cabarrus ] je ne trouve pas l'erreur dans mon programme?#include#includeint deltanul(int);float deltainf(float);float deltasup(float);void main(void){float a,b,c taille d'un INT [ par sena ] Bonjour,voila ce que je fais:int variable;variable = 367200;Ceci fonctionne.or je lis dans les bouqins qu'un int ne doit pas dépasser +32768Comment ce char et int [ par ToToL ] Bonjour,Je voudrai faire une saisi a l'utilisateur et il faut k'il insert que des chiffres car apres je doit faire une operation avec ce chiffre et do allocation dynamique [ par JediMaster ] je veux crée une variable dynamiqueje fait donc un pointeur et tous marche bien sauf que quelque chose me chifone voila mon codeint* variable = NULL;v type de variable? long int ? [ par dleewax ] salut! je suis nouveau dans le C++ et j'ai un petit problème... je suis en train de faire un petit programme permettant de calculer les factorielles.. Probl avec float et int [ par David2907 ] Après un calcul, comment faire pour afficher un resultat sans virgule ou un resultat avec virugule???Merci


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales