Double en C
Résolu/Fermé
A voir également:
- Double en C
- Double ecran - Guide
- Whatsapp double sim - Guide
- Double appel - Guide
- Double authentification google - Guide
- Double boot - Guide
8 réponses
Tiens bizarre le meme programme que j ai du faire pour ce vendredi, je trouve ton programme bien trop complexe par rapport a ce qui est demandé et beaucoup trop de chose en trop, de plus tu utilise lecture.h, mais cela fonctionne seulement pour lire un entier donc ne peux pas fonctionné ici a moins que tu le modifis, donc utilise des scanf, ça sera mieux je pense pour toi
Tu veux saisir un 'double', alors autant déclarer un double, d'autant plus que c'est ce qu'attend ta fonction 'leibniz'):
Il y a quelque chose qui ne va pas, c'est div = 1/i; la valeur de div ne changera plus... il faut faire cette opération dans la boucle ! Et il n'y a point de point-virgule à la fin du while !
D'autre part dans ton code, pour l'initialisation, autant écrire:
Bon courage.
double precision; scanf ("%lf", &precision);
Il y a quelque chose qui ne va pas, c'est div = 1/i; la valeur de div ne changera plus... il faut faire cette opération dans la boucle ! Et il n'y a point de point-virgule à la fin du while !
D'autre part dans ton code, pour l'initialisation, autant écrire:
int i = 1; double div, somme = 1;C'est plus lisible et il est inutile de définir un 'pi'.
Bon courage.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
16 avril 2009 à 11:50
16 avril 2009 à 11:50
Salut,
Je vois plusieurs erreurs.
Dans le main :
Tout d'abord, pourquoi mettre float p, alors que tu lis un double et que ta fonction leibniz prend en arguments un double ? Mets plutôt double p..
En suite, tu nous as pas mis le prototype de lecture_double(), donc je ne peux pas te dire ce qu'il faut mettre en arguments (peut-être rien d'ailleurs, car je ne vois pas le genre d'informations utiles).
Dans la fonction leibiniz :
div=1/i; 1 et i sont des entiers, donc div contiendra 0.0. Il faut plutôt calculer 1.0/i.
som=(som-(div)); Ca n'est pas une erreur, mais les parenthèses sont complètement inutiles.
if ((i/2)==0); Attention au point-virgule. Il ne faut pas en mettre, sinon les instructions après ne seront pas tributaires de la condition. Que veux-tu dire algorithmiquement ?
De plus, ne mets pas de point-virgule à la fin de ton while, sinon aucune instruction ne sera traitée en boucle. Et enfin, aucune des variables pi et div conditionnant l'arrêt de ta boucle while ne sont changées dans le bloc. => risque de boucle infinie.
Cdlt
Je vois plusieurs erreurs.
Dans le main :
Tout d'abord, pourquoi mettre float p, alors que tu lis un double et que ta fonction leibniz prend en arguments un double ? Mets plutôt double p..
En suite, tu nous as pas mis le prototype de lecture_double(), donc je ne peux pas te dire ce qu'il faut mettre en arguments (peut-être rien d'ailleurs, car je ne vois pas le genre d'informations utiles).
Dans la fonction leibiniz :
div=1/i; 1 et i sont des entiers, donc div contiendra 0.0. Il faut plutôt calculer 1.0/i.
som=(som-(div)); Ca n'est pas une erreur, mais les parenthèses sont complètement inutiles.
if ((i/2)==0); Attention au point-virgule. Il ne faut pas en mettre, sinon les instructions après ne seront pas tributaires de la condition. Que veux-tu dire algorithmiquement ?
De plus, ne mets pas de point-virgule à la fin de ton while, sinon aucune instruction ne sera traitée en boucle. Et enfin, aucune des variables pi et div conditionnant l'arrêt de ta boucle while ne sont changées dans le bloc. => risque de boucle infinie.
Cdlt
Tout d'abord merci pour vos réponses.
Voici le résultat après erreurs de synthaxe corrigées. Ce que j'ai fait c'est calculé la fameuse somme tant que la précision n'est pas atteinte , mais maintenant toujours le même bug avec lire double il me dit que lire double n'est pas défini ... (undefined reference to lire_double()) ....
#include <stdio.h>
#include <stdlib.h>
#include <lecture.h>
#include <math.h>
int leibniz(double p)
{
double pi;
double som;
double div;
int i;
i=1;
som=1;
while (div<p)
{
div=1/i;
i=i+2;
som=(som-(div));
}
pi=4*som;
if ((i/2)==0);
pi=-4*som;
printf("la valeur est %f",pi);
return 0;
}
int main()
{
double p;
p=lire_double();
leibniz(p);
return 0;
}
Voici le résultat après erreurs de synthaxe corrigées. Ce que j'ai fait c'est calculé la fameuse somme tant que la précision n'est pas atteinte , mais maintenant toujours le même bug avec lire double il me dit que lire double n'est pas défini ... (undefined reference to lire_double()) ....
#include <stdio.h>
#include <stdlib.h>
#include <lecture.h>
#include <math.h>
int leibniz(double p)
{
double pi;
double som;
double div;
int i;
i=1;
som=1;
while (div<p)
{
div=1/i;
i=i+2;
som=(som-(div));
}
pi=4*som;
if ((i/2)==0);
pi=-4*som;
printf("la valeur est %f",pi);
return 0;
}
int main()
{
double p;
p=lire_double();
leibniz(p);
return 0;
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
16 avril 2009 à 20:07
16 avril 2009 à 20:07
Oui mais je ne connais toujours pas le prototype de lire_double. Sans ça je ne peux pas t'aider.
Ensuite il y a toujours le problème de div=1/i;. Pour la solution, relis mon post précédent.
Ensuite i, va augmenter à chaque itération, donc div va diminuer. Or la condition d'arrêt est : div>=p.
Donc il y a un souci à ce niveau-là aussi.
if ((i/2)==0);
Voire remarque dans mon précédent post.
Ensuite il y a toujours le problème de div=1/i;. Pour la solution, relis mon post précédent.
Ensuite i, va augmenter à chaque itération, donc div va diminuer. Or la condition d'arrêt est : div>=p.
Donc il y a un souci à ce niveau-là aussi.
if ((i/2)==0);
Voire remarque dans mon précédent post.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Oui merci tu as raison c'est inférieur ou égal.Merci
Par contre il faudrait que j'écrive moimême le processus pour liire un double ? Parce que j'utilise lire_entier et lire_reel avec lecture.h sans probleme, j'ai pensé que lire_double marcherais .... ce serait trop facile.
Y aurait il une solution pour arriver à la même fin par un autre moyen ? C'est à dire que l'utilisateur rentre un double (O,OO1 ) par exemple et que cela fonctionne?
Par contre il faudrait que j'écrive moimême le processus pour liire un double ? Parce que j'utilise lire_entier et lire_reel avec lecture.h sans probleme, j'ai pensé que lire_double marcherais .... ce serait trop facile.
Y aurait il une solution pour arriver à la même fin par un autre moyen ? C'est à dire que l'utilisateur rentre un double (O,OO1 ) par exemple et que cela fonctionne?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
17 avril 2009 à 00:40
17 avril 2009 à 00:40
T'as le droit d'ouvrir ton fichier lecture.h ;-))). Tu verras le prototype des fonctions proposées. S'il n'y a rien concernant double, prend lire_float. Il y aura conversion implicite du float vers le double.
Voici le resultat et ... ca ne marche toujours pas je comprends pas manuellement ca marche (si je prends un stylo papier et que j'execute j'arrive au bon résultat. Est ce qie quelqu'un verrait ,,, je suis desesperée parce que je suis sur que c'est une erreur débile mais jla vois pas ..?(Je pense que c'est au nivo de div que c'est pas bon car lorsque je demande la valeur de div c'est toujours 0.000).MErci
#include <stdio.h>
#include <stdlib.h>
#include <lecture.h>
#include <math.h>
int leibniz(double p)
{
float var;
float som;
float div;
int i;
float x;
x=1/p;
i=3;
som=1;
var=-1;
div=1.0/i;
while ((div)>= p);
{ som=som+var*(1.0/i);
var=-var;
i=i+2;
div=1/i;
}
printf("la valeur est %f",som);
return 0;
}
int main()
{
float n;
n=lire_reel();
leibniz(n);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <lecture.h>
#include <math.h>
int leibniz(double p)
{
float var;
float som;
float div;
int i;
float x;
x=1/p;
i=3;
som=1;
var=-1;
div=1.0/i;
while ((div)>= p);
{ som=som+var*(1.0/i);
var=-var;
i=i+2;
div=1/i;
}
printf("la valeur est %f",som);
return 0;
}
int main()
{
float n;
n=lire_reel();
leibniz(n);
return 0;
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
>
jet
17 avril 2009 à 15:39
17 avril 2009 à 15:39
div=1/i;
Toujours la même erreur...
Toujours la même erreur...
oui pardon je l'avais corrigé mais ca ne marche toujours pas ....
#include <stdio.h>
#include <stdlib.h>
#include <lecture.h>
#include <math.h>
int leibniz(double p)
{
float var;
float som;
float div;
float i;
float x;
i=1.0;
som=1;
var=-1;
div=1.0/i;
while ((div)> p);
{
div=1.0/i;
som=som+var*div;
i=i+2;
var=-var;
printf("la valeur est %f",4*som);
}
return 0;
}
int main()
{
float n;
n=lire_reel();
leibniz(n);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <lecture.h>
#include <math.h>
int leibniz(double p)
{
float var;
float som;
float div;
float i;
float x;
i=1.0;
som=1;
var=-1;
div=1.0/i;
while ((div)> p);
{
div=1.0/i;
som=som+var*div;
i=i+2;
var=-var;
printf("la valeur est %f",4*som);
}
return 0;
}
int main()
{
float n;
n=lire_reel();
leibniz(n);
return 0;
}
Ca marche !!!!!! je sais pas ce que j'ai changé mais cté bien les 1.0 ...mais je pense aussi que j'avais mis un point virgule a while aussi .. MERCI BEAUCOUP en tout cas !!!
#include <stdio.h>
#include <stdlib.h>
#include <lecture.h>
#include <math.h>
int leibniz(double p)
{
float var;
float som;
float div;
float i;
float x;
i=3;
som=1;
var=1;
div=1.0/i;
while (div>= p)
{
var=-var;
som=som+var*div;
i=i+2;
div=1.0/i;
}
printf("la valeur est %f",4*som);
return 0;
}
int main()
{
float n;
n=lire_reel();
leibniz(n);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <lecture.h>
#include <math.h>
int leibniz(double p)
{
float var;
float som;
float div;
float i;
float x;
i=3;
som=1;
var=1;
div=1.0/i;
while (div>= p)
{
var=-var;
som=som+var*div;
i=i+2;
div=1.0/i;
}
printf("la valeur est %f",4*som);
return 0;
}
int main()
{
float n;
n=lire_reel();
leibniz(n);
return 0;
}