Exercice en langage c

Résolu/Fermé
man r. Messages postés 11 Date d'inscription samedi 30 mars 2013 Statut Membre Dernière intervention 1 juin 2013 - 30 mars 2013 à 23:49
man r. Messages postés 11 Date d'inscription samedi 30 mars 2013 Statut Membre Dernière intervention 1 juin 2013 - 31 mars 2013 à 12:34
Bonsoir, comme ceci est indiqué dans le titre, je me casse la tête pendant un bon moment pour mettre le programme suivant en évidence. alors pour le programme je suis censée écrire un programme C qui demande à l'utilisateur deux nombres réels a et b et un entier k, puis calcule et afficher la valeur approchée de sin(x) pour tous les nombres inclus entre a t b avec un pas de 0.1.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

double factorielle (double nombre)
{
int compteur=1,resultat=1;
while (compteur<=nombre){
resultat*=compteur;
compteur++;
}
return resultat;
}
int main()
{
int k=0,compteur1=0;
double a=0,b=0,sinus=0,resultat=0;
printf ("Votre chiffre est inclu entre ");
scanf ("%lf %lf",&a,&b);

printf ("La precision = ");
scanf ("%d",&k);
while (a<=b){

while (compteur1<k){
sinus+=pow(-1,compteur1)*pow(a,2*compteur1+1)/factorielle(2*compteur1+1);
compteur1++;

}
printf ("sin (%f) = %f \n",a,sinus);
a+=0.1;

}

system("PAUSE");
return 0;
}
J'ai calculé le sin(x) avec le développement limité et tout, mon problème actuel est quand je compile ça me donne un truc genre sin(3)=-1.5 sin(3.1)=-1.5 sin(3.2)=-1.5 ..... Je crois que le problème réside en les deux boucles imbriqués, j'ai essayé pourtant je ne sais pas l'erreur provient d'où. En attendant votre aide, je vous remercie d'avance :) !
A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
31 mars 2013 à 09:22
Bonjour,

Tout d'abord, je te conseillerais de faire une fonction sinus(), cela serait plus propre.

Sinon :

while (a<=b){

while (compteur1<k){
sinus+=pow(-1,compteur1)*pow(a,2*compteur1+1)/factorielle(2*compteur1+1);
compteur1++;

}
printf ("sin (%f) = %f \n",a,sinus);
a+=0.1;

}

Dès que tu sors de la 2ème boucle while, tu as compteur1>=k, tu affiches la valeur de sin, et tu ne remets pas compteur1 à 0. Au final lorsque tu reboucles (car a<=b), le programme ne recalculera pas le sin car compteur1 n'a pas été réinitialisé.

Et la prochaine fois que tu postes un code, n'oublie pas de le mettre entre deux balises "code" (à droite du bouton "souligné").
Cdlt,
1
man r. Messages postés 11 Date d'inscription samedi 30 mars 2013 Statut Membre Dernière intervention 1 juin 2013
31 mars 2013 à 12:34
Je prendrai vos conseils en compte, et surtout je vous remercie infiniment :) !
0