IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Calcul de sinus avec un DL


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Calcul de sinus avec un DL
    Bonjour à tous,

    J'espère être dans la bonne section!

    Voilà dans le cadre de nos cours d'info (programmation en C), on doit réaliser un code qui permette de calculer le sinus d'un angle. Pour ce faire j'ai utilisé la méthode du developpement en série.

    Mais j'ai l'impression que je trouve un resultat plutôt étrange...

    Est ce que vous pourriez jeter un oeil à mon code et me dire ce qui ne va pas ?

    Merci d'avance

    YoKo

    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    // fonction puissance: x puissance n avec precision double.
    double power(double x, double n)
     
    {
        double y=1;
        int a=1;
     
        if(n==0)
        {
            return 1;
        }
        else
        {
            while (a<=n)
            {
                y=y*x;
                a++;
            }
            return y;
        }
    }
     
    // factorielle d'un nombre: precision double.
     
    double fact(double c)
     
    {
        int i;
        double n,fact=1;
     
        for(i=1,fact=1;i<c+1;i++)
        {
            fact*=i;
     
            return fact;
        }
    }
     
    // programme principal
     
    int main()
     
    {
     
    double s,x;
    int i,n;
     
    printf("Donner la valeur de x\n");
    scanf("%lf",&x);
     
    printf("Donner l'ordre du DL\n");
    scanf("%d",&n);
     
    s=x*(M_PI/180); // je convertie en radian ici.
     
    // Le DL de sinus:
     
    for(i=1;i<=n;i++)
     
    {
        s=s+(power(-1,i))*(power(x*(M_PI/180),2*i+1)/fact(2*i+1));
    }
     
    printf("la valeur de sin %lf au DL d'ordre %d est %lf:\n\n",x,n,s);
    printf("la valeur exact de sin %lf est %lf\n\n",x,sin(x));
    printf("La valeur de Pi est %lf\n",M_PI);
     
     
    return 0;
    }
    A titre d'exemple pour sinus 90 je trouve:

    Donner la valeur de x
    90
    Donner l'ordre du DL
    10
    la valeur de sin 90.000000 au DL d'ordre 10 est 9349.193177:

    la valeur exact de sin 90.000000 est 0.893997

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Une erreur dans fact -un compilateur bien réglé devrait te donner un warning- :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     warning: control reaches end of non-void function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    double fact(double c)
    {
        int i;
        double fact = 1;
     
        for (i = 1, fact = 1; i < c + 1; i++) {
            fact *= i;
            /* return fact*/     
        }
        return fact;
    }
    Et une erreur dans l'appel de sin : il manque la conversion en radian.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("la valeur exact de sin %lf est %lf\n\n", x, sin(x* (M_PI / 180)));
    Une piste pour faciliter la lecture : remplacer x par x_deg et créer une variable x_rad pour ne faire la conversion qu'une seule fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Donner la valeur de x
    90
    Donner l'ordre du DL
    10
    la valeur de sin 90.000000 au DL d'ordre 10 est 1.000000:
     
    la valeur exact de sin 90.000000 est 1.000000
     
    La valeur de Pi est 3.141593

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup de ta réponse rapide!

    Je vais suivre ton conseil concernant les variables x_deg et x_rad, sa ne sera que plus simple...

    Est ce que tu aurais un lien pour configurer le compilateur, je travail avec Code::Block là....?

    YoKo

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par YoKoM3n Voir le message
    Est ce que tu aurais un lien pour configurer le compilateur, je travail avec Code::Block là....?
    http://emmanuel-delahaye.developpez....-codage-c/#LVI
    Dernière modification par Jerome Briot ; 15/10/2010 à 23h44.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Je te remercie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul de stock avec valeure null
    Par nideux dans le forum Access
    Réponses: 3
    Dernier message: 02/12/2005, 11h10
  2. Calculer cos(x) avec une série
    Par Évariste Galois dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 23/08/2005, 15h47
  3. formule de calcul du TRI avec PL/SQL
    Par mongilotti dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 30/07/2005, 20h23
  4. composant de calcul [champ date] avec rave report
    Par segnac dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/06/2005, 19h08
  5. calculer une moyenne avec une requete externe
    Par allowen dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/01/2005, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo