nashoy
Messages postés125Date d'inscriptiondimanche 6 avril 2003StatutMembreDernière intervention 7 octobre 2006
-
5 nov. 2005 à 17:45
nashoy
Messages postés125Date d'inscriptiondimanche 6 avril 2003StatutMembreDernière intervention 7 octobre 2006
-
5 nov. 2005 à 18:25
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 ?
MrdJack
Messages postés146Date d'inscriptionjeudi 22 avril 2004StatutMembreDernière intervention 8 mars 20082 5 nov. 2005 à 18:04
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 !
cs_Tidam
Messages postés124Date d'inscriptionjeudi 2 janvier 2003StatutMembreDernière intervention16 février 20062 5 nov. 2005 à 18:08
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) ...
vangeurmasker
Messages postés99Date d'inscriptionmercredi 12 mai 2004StatutMembreDernière intervention29 mars 2006 5 nov. 2005 à 18:18
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.