Code correct?
jaouabi
Messages postés
5
Statut
Membre
-
CrazyGeekMan Messages postés 971 Statut Membre -
CrazyGeekMan Messages postés 971 Statut Membre -
bonjour a tous
c'est un programme qui prend l'enseble des reels ecrit au clavier et lorsque le nombre 12.34 s'ecrit il calcule leurs moyenne.
est ce que vous pouvez me dire qu'elle est la faute dans mon code et merci d'avance.
voici le code source
c'est un programme qui prend l'enseble des reels ecrit au clavier et lorsque le nombre 12.34 s'ecrit il calcule leurs moyenne.
est ce que vous pouvez me dire qu'elle est la faute dans mon code et merci d'avance.
voici le code source
#include <stdio.h>
int main()
{
float x,s,moy;
int i;
scanf("%i", &x);
s=0;
i=0;
while (x!=12.34)
{
s+=x;
scanf("%i",&x);
i++;
}
moy=s/i;
printf ("%f",moy);
return 0;
}
A voir également:
- Code correct?
- Code ascii - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
2 réponses
Salut,
Je n'ai pas trop compris le fonctionnement du programme ^^
En tout cas, si tu met int i alors tu dois mettre scanf("%d",&i)
Et pour float x, tu dois mettre printf("%f",&x)
Je n'ai pas trop compris le fonctionnement du programme ^^
En tout cas, si tu met int i alors tu dois mettre scanf("%d",&i)
Et pour float x, tu dois mettre printf("%f",&x)
Ceci fonctionnera mieux:
Vu la représentation de floats/double sur un ordinateur, tu ne peux pas utiliser la comparaison == / !=
Gates gave ^W sold you the windows.
GNU gave us the whole house.(Alexandrin)
#include <stdio.h>
#include <math.h>
#define epsilon 1.0e-6
int main()
{
float x, s, moy;
int i;
scanf("%f", &x);
s=0;
i=0;
while ( fabs( (x - 12.34) /12.34 ) > epsilon )
{
s += x;
scanf("%f", &x);
i++;
}
if ( i )
{
moy = s / i;
printf ("Moyenne : %f\n",moy);
}
return 0;
}
Vu la représentation de floats/double sur un ordinateur, tu ne peux pas utiliser la comparaison == / !=
Gates gave ^W sold you the windows.
GNU gave us the whole house.(Alexandrin)
Comment sais tu la valeur de epsilon pour son implémentation ?
Si l'on veut bien faire, à mon sens https://forums.commentcamarche.net/forum/affich-34074667-code-correct#5
Epsilon est une constante définie pour chaque type flottant dans float.h
Pour un float, la constante est FLT_EPSILON
Cette constante est définie depuis le standard C89, et sa valeur dépend de l'implémentation, le standard ne fixant qu'une valeur 1E-5 maximale, la valeur réelle pouvant être plus petite (donc la précision plus grande).
Voir le standard (Annexe A.4) + aussi http://www.cplusplus.com/reference/cfloat/
Si l'on veut bien faire, à mon sens https://forums.commentcamarche.net/forum/affich-34074667-code-correct#5
Epsilon est une constante définie pour chaque type flottant dans float.h
Pour un float, la constante est FLT_EPSILON
Cette constante est définie depuis le standard C89, et sa valeur dépend de l'implémentation, le standard ne fixant qu'une valeur 1E-5 maximale, la valeur réelle pouvant être plus petite (donc la précision plus grande).
Voir le standard (Annexe A.4) + aussi http://www.cplusplus.com/reference/cfloat/
%i n'existe pas :/
http://www.cplusplus.com/reference/cstdio/scanf/
cependant, c'est plutôt que devrait utiliser jaouabi car le paramètre passé est un pointeur sur float.
ensuite il y a d'autres problèmes liés au fait qu'il tente de comparer un float avec un littéral qui est de type double par défaut... alors sa comparaison devrait être plutôt pour préciser expressément que ce littéral est un float ... cela dit la précision de représentation des nombres flottants fait que ce genre de comparaisons est hasardeuse.
Voir https://stackoverflow.com/questions/8266878/why-floating-point-value-conditions-failed-in-if-condition
par ailleurs, il risque une division par zéro aussi car est mal incrémenté.
Désolé et merci pour cette nouveauté pour moi :)
Epsilon est une constante définie pour chaque type flottant dans float.h
Pour un float, la constante est FLT_EPSILON