Langage C: Calculer un sinus?

Fermé
Alien Nation Messages postés 3 Date d'inscription samedi 18 octobre 2008 Statut Membre Dernière intervention 18 octobre 2008 - 18 oct. 2008 à 13:27
Yuku Messages postés 199 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 22 mars 2012 - 18 oct. 2008 à 14:36
Bonjour,

Dans le cadre d'un cours de programmation, nous sommes amenés à devoir créer une application console permettant de calculer le sinus d'un nombre. Nous ne pouvons pas nous servir de "math.h". Je pense donc qu'il faut utiliser les series.
Il faut creer 2 variantes du programme:
Variante 1 : en fixant le nombre d’itérations
Variante 2 : en fixant la précision du calcul

Mais je n'y arrive vraiment pas.
J'ai trouvé la formule du sinus sur le net mais je n'arrive pas à l'utiliser dans une application.
(Sin (x) = X - X3/ 3! + X5/ 5! - ... + (-1)(n+1) * X(2*n-1)/ (2n-1)!)

Je verrai la solution en cours cette semaine mais ça me trotte tellement dans la tête...

J'espère que vous pourrez m'aider et je vous remercie à l'avance pour vos réponses.

Amicalement,

Alien

8 réponses

Yuku Messages postés 199 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 22 mars 2012 4
18 oct. 2008 à 14:23
Bon, je l'ai un peu amélioré quand même en rajoutant pas mal d'infos mais tu trouveras dedans le sinus :

#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;


double Somme(double x, double n);
double Difference(double x, double n);
double Produit(double x, double n);
double Quotient(double x, double n);
double Puissance(double x, double n);
double Exponentielle(double x, double n);
double Factorielle(double X);
double Sinus(double x, double n);
double Cosinus(double x, double n);
int CheckDigit(int x);
int Reste(int x, int n);





int main(int argc, char *argv[])
{
    double x = 0, puissance = 0, exponentielle = 0, sinus = 0, cosinus = 0, n = 0;
    double somme = 0, difference = 0, quotient = 0, produit = 0;
    int checkdigit1 = 0, checkdigit2 = 0, checkdigit = 0, reste = 0;
    printf("             ====  RAPPORTS ENTRE DEUX NOMBRES  ====\n\nCe programme calcule de nombreuses valeurs par rapport a deux nombres.\nIci, x vaudra un nombre normal, et n soit un deuxieme nombre normal,\nsoit une puissance.\n\nEntrez un nombre x...    ");
    scanf("%lf", &x);
    printf("\nEntrez un nombre n...    ");
    scanf("%lf", &n); 
    sinus = Sinus(x, n);
    puissance = Puissance(x, n);
    exponentielle = Exponentielle(x, n);
    cosinus = Cosinus(x, n);
    somme = Somme(x, n);
    difference = Difference(x, n);
    produit = Produit(x, n);
    quotient = Quotient(x, n);
    checkdigit1 = CheckDigit(x);
    checkdigit2 = CheckDigit(n);
    checkdigit = checkdigit1 + checkdigit2;
    reste = Reste(x, n);
    printf("\n\n______________________________________\n______________________________________\n\nSomme : %.2lf.", somme);
    printf("\nDifference : %.2lf.", difference);
    printf("\nProduit : %.2lf.", produit);
    printf("\nQuotient : %.2lf.", quotient);
    printf("\nReste : %d.", reste);
    printf("\nSomme des chiffres de x : %d.", checkdigit1);
    printf("\nSomme des chiffres de n : %d.", checkdigit2);
    printf("\nSomme des chiffres de x et de n : %d.", checkdigit);
    printf("\nPuissance : %.2lf.", puissance);
    printf("\nExponentielle : %.2lf.", exponentielle);
    printf("\nSinus : %.2lf.", sinus);
    printf("\nCosinus : %.2lf.\n______________________________________\n______________________________________\n\n\n", cosinus);
    system("PAUSE");
    return EXIT_SUCCESS;
}






double Puissance(double x, double n)
{
       double Resultat = 1;
       double Compteur = 0;
       do{
       Resultat *= x;
       Compteur++;
       }while(Compteur < n);
       return Resultat;
}






double Factorielle(double X)
{
       double Compteur = 1, Total = 2;
       do{
           Total = Total*Compteur;
           Compteur++;
           }while(Compteur <= X);
       return Total;
}





double Exponentielle(double x, double n)
{
       double Compteur = 1, Total = 1;
       do{
           Total += (pow(x, Compteur)/Factorielle(Compteur))*2;
           Compteur++;
           }while(Compteur <= n);
       return Total;
}





double Sinus(double x, double n)
{
       double Compteur = 1, Total = 0, Res = 0;
       do{
              if(Compteur<=n)
              {
            Res = ((pow(x, Compteur))/(Factorielle(Compteur)))*2;
            Total = Total + Res;
            Compteur = Compteur + 2; 
              }
              else
              {
                         return Total;
              }
              
              if(Compteur<=n)
              {
            Res = ((pow(x, Compteur))/(Factorielle(Compteur)))*2;
            Total = Total - Res;
            Compteur = Compteur + 2;
              }
              else
              {
                         return Total;
              }          
       }while(Compteur<=n);
       
       return Total;
}




double Cosinus(double x, double n)
{
       double Compteur = 0, Total = 0, Res = 0;
       do{
              if(Compteur<=n)
              {
            Res = ((pow(x, Compteur))/(Factorielle(Compteur)))*2;
            Total = Total + Res;
            Compteur = Compteur + 2; 
              }
              else
              {
                         return Total;
              }
              
              if(Compteur<=n)
              {
            Res = ((pow(x, Compteur))/(Factorielle(Compteur)))*2;
            Total = Total - Res;
            Compteur = Compteur + 2;
              }
              else
              {
                         return Total;
              }          
       }while(Compteur<=n);
       
       return Total;
}







double Somme(double x, double n)
{
       double Total = 0;
       Total = x+n;
       return Total;
}




double Difference(double x, double n)
{
       double Total = 0;
       Total = x-n;
       return Total;
}





double Produit(double x, double n)
{
       double Total = 0;
       Total = x*n;
       return Total;
}





double Quotient(double x, double n)
{
       double Total = 0;
       if(n != 0)
       {Total = x/n;}
       else
       {Total == 0;}
       return Total;
}

int CheckDigit(int x)
{
    int ch1 = 0, ch2 = 0, ch3 = 0, ch4 = 0, ch5 = 0, ch6 = 0;
    int rs1 = 0, rs2 = 0, rs3 = 0, rs4 = 0, rs5 = 0, rs6 = 0; 
    
    ch1 = x / 100000;
    rs1 = x % 100000;
    ch2 = rs1 / 10000;
    rs2 = rs1 % 10000;
    ch3 = rs2 / 1000;
    rs3 = rs2 % 1000;
    ch4 = rs3 / 100;
    rs4 = rs3 % 100;
    ch5 = rs4 / 10;
    rs5 = rs4 % 10;
    ch6 = rs5 / 1;
    rs6 = rs5 % 1;
    
    return ch1+ch2+ch3+ch4+ch5+ch6;
}




int Reste(int x, int n)
{
    int Resultat = 0;
    Resultat = x%n;
    return Resultat;
}
1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
18 oct. 2008 à 14:27
J'ai pas regardé ton code en profondeur mais ce qui m'interpelle et le mélange de C et de C++.
Pas besoin de using namespace std. Pas besoin d'inclure iostream ni cstdlib mais inclue plutôt stdio.h et stdlib.h.
Le mélange de C et C++ c'est pas tip top ;)
-1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
18 oct. 2008 à 13:35
Oui, déjà tu ramènes le X à un intervalle compris entre -Pi et Pi par soustraction de kPi.
Et ensuite tu utilises une approximation avec ta série entière.
Avec des boucles, tu pourras facilement calculer X-X*X*X/3 ! etc.
Fais par de ta recherche et on t'aidera. A noter que si tu cherches sur le forum, la réponse a déjà été résolue ;)
0
Alien Nation Messages postés 3 Date d'inscription samedi 18 octobre 2008 Statut Membre Dernière intervention 18 octobre 2008
18 oct. 2008 à 13:52
Le problème c'est que certains ont la bosse des maths, moi c'est plutot un creux...
Est ce que tu pourrais me donner quelques explications par un code et quelques commentaires a l'interieur?
Ou tout simplement me donner le lien du sujet qui traite de ça.

J'ai envie de le faire par moi même mais je ne vois vraiment pas comment procéder.
Les maths me tueront :(
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
18 oct. 2008 à 14:04
Ce que je te demande ce n'est pas des maths mais de la simple recherche.
Allez pour t'aider : http://www.commentcamarche.net/forum/affich 8936182 euh o x
Bonne lecture
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Yuku Messages postés 199 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 22 mars 2012 4
18 oct. 2008 à 14:14
J'ai eu un exo comme ça, je l'ai fait hier :)

Tu veux la solution?
0
Alien Nation Messages postés 3 Date d'inscription samedi 18 octobre 2008 Statut Membre Dernière intervention 18 octobre 2008
18 oct. 2008 à 14:22
Ce serais sympa oui.
0
Yuku Messages postés 199 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 22 mars 2012 4
18 oct. 2008 à 14:36
Ouais, je vais y penser sans tarder.
0
Yuku Messages postés 199 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 22 mars 2012 4
18 oct. 2008 à 14:31
C'est que j'ai configuré DevC++ en langage C++ à la base, d'où le fait qu'il me donne les bibliothèques iostream et cstdlib, et non stdlib.h et stdio.h...
-1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
18 oct. 2008 à 14:35
Mauvais réflexe alors.
Configure le en C et programme en C. Ou laisse-le comme ça et configure le en C++.
-1