Exercice en langage c

Résolu
man r. Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -  
man r. Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention  
 
Je prendrai vos conseils en compte, et surtout je vous remercie infiniment :) !
0