Probleme avec output valeur

Fermé
ali - 17 févr. 2013 à 22:49
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 18 févr. 2013 à 06:32
bonjour
est ce que vous pouvez m'aider avec ce programme, je suis sure qu'il est juste mais en output il me donne des valeur bizarre
meci en avance

#include<math.h>
#include<stdio.h>
#define Nmax 40
void main()
{
int N,i;
float a,x[Nmax],d;
puts("Calcul du terme d'indice N d'une suite de la forme :x[n]=(x[n-1]+a/x[n-1])/2");
do
{
do
{
printf("donner le valeur de a(>=0): ");
scanf("%f",&a);
}
while(a<0);
do
{
printf("donner la valeur de N(>0):");
scanf("%d",&N);
}
while(N<0);
x[0]=a/2;
for(i=0;i<=N;i++)
{
x[i+1]=(1/2)*((x[i])+(a/x[i]));

}

printf("la valeur calculee de x[%d] est=%f \n",N,x[N]);
d=x[N]*x[N];
printf("son carre est egal a: %f \n",d);
}
while(a!=0);
}

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
17 févr. 2013 à 23:53
je suis sure qu'il est juste mais en output il me donne des valeur bizarre
C'est qu'il n'est pas si juste que ça...

void main()
Le prototype de main sans argument est : int main (void)
Et il faut mettre un return 0; à la fin.

while(N<0);
Il faudrait également vérifier que N<Nmax sinon, il y aura un segfault.

x[i+1]=(1/2)*((x[i])+(a/x[i]));
1/2 vaut 0. Donc x[i] vaudra 0 pour i>=1.
Mets plutôt (float)1/2 ou 1.0f/2 ou 1.f/2
D'ailleurs, je te conseille d'utiliser des double plutôt que les float.

Cdlt,
0
Merci beaucoup pour vos conseille
0
salut
i faut remplacer (1/2) par (0.5) dans x[i+1]=(1/2)*((x[i])+(a/x[i]));
j'ai eu trouver la truc finalement
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
18 févr. 2013 à 06:32
Oui, par 0.5, ça fonctionne aussi. Ce qu'il faut savoir c'est qu'1/2 est une division d'entier qui retourne le diviseur (0 ici). D'où les propositions ci-dessus.
0