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 ?
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 !
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) ...
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.