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 -
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 :) !
#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:
- Exercice en langage c
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage visual basic - Télécharger - Langages
- Langage basic gratuit - Télécharger - Édition & Programmation
2 réponses
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,
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,