Probleme de décimales .. [Résolu]

Signaler
Messages postés
125
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
7 octobre 2006
-
Messages postés
125
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
7 octobre 2006
-
Bonjour,
Je commence en c++ et je commence à recontrer les premiers petits bloquages ; en effet, j'ai un petit problème avec les décimales :

int b=3;
int a=10;
float res;
res = a/b;
printf("%f",res);

et il m'affiche : 3.000000 ...
Où est l'erreur ?

Autres petites questions au passage :
- Y a-t-il une différence entre cout/cin et printf/scanf ? (au niveau de la vitesse, utilisation, "clarté" de la source , ...)
- Si j'ai tout compris, l'équivalent de "Dim ma_var As String" en VB est "char *ma_var" en cpp .. ?
- Quelle est la différence entre "char *ma_var" et "char ma_var[256]" par exemple ?

Merci

nashoy

4 réponses

Messages postés
146
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
8 mars 2008
1
une opération entre 2 entiers ne donnera jamais le résultat que tu
souhaite et pour cause, si tu décompose ton code, tu remarquera que tu
effectues une division entre 2 entiers : 10/3 qui vaux 3

puis tu affecte cette valeur calculée dans une variable de type
float ---> ca rajoute juste la virgule et quelques 0.



pour faire ton opération comme tu l'entend, utilise les cast avec tes
integer ou encore, utilise des le début des variables float.

ca dépend de ton programme, les deux méthodes sont sensiblement équivalentes.



voila ! si tu tombe sur un autre probleme dans le genre, pense bien a
décomposer étape par étape les opérations effectuées, c'est la premiere
chose a faire !



@++
Messages postés
124
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
16 février 2006
2
10 / 3 = 3.333333 on est d'accord, sauf que en C/C++ cela depent du type des variables int/float.

on obtient 3.333333 lorsque l'on travaille en float mais dans ton
exemple, tu divise 2 entiers dont le resultats est un entier ensuite tu
stock le resultats dans un float...



traduction: a(int)/b(int) donne donc un int le fait de stocker le
resultat dans le float rajoute simplement le .000000 a la valeur
obtenue.



concernant cin/cout printf/scanf c'est simple : printf/scanf = C -
cin/cout = C++ ... au niveau utilisation je pense que cin/cout sont
plus simple car tu n'as pas a preciser quel type de variable c'est !



sinon pour le reste j'te conseil de prendre des cours de C/C++ (livre ou internet) ...
Messages postés
99
Date d'inscription
mercredi 12 mai 2004
Statut
Membre
Dernière intervention
29 mars 2006

Pour que ton code marche il suffit de faire :
res = (float)a/(float)b;

explication :
la division de deux entier donne un resultat entier (ici 3). Il s'agit de la division euclidienne. Si tu veut le reste de ta division il suffit d'utiliser : a%b qui vaudra 1 ici.
en précisant (float)a et (float)b, tu dit a ton compilateur que tu veut convertir tes variables en float avant de faire la division et non après comme dans ton code. Voila c'est aussi simple que ça.
Messages postés
125
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
7 octobre 2006

Ah oui parfait! Merci beaucoup c'est vraiment génial de recevoir une réponse aussi rapidement !!


nashoy