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 :

Aide programmer la suite sin(x)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 20
    Par défaut Aide programmer la suite sin(x)
    Bonjour á tous,
    Je serais tres ravi de lire vos propositions d aides, je programme un exercice de Tp: il s agit de programmer cette suite sin(x)= (x^1)/1!-(x^3)/3!+(x^5)/5!-(x^7/7!)... Alors j ai programmer comme suite. seulement il calcule faux
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    // la fonction factoriel
    int fact( int k)
    {
       double fkt = 1;
       for( int i=1; i<=(2k+1); i++)
          fkt = fkt*(i);
          return fkt;
    }
    // la fonction x puissance y ou x^y
    double pt( double x, int k)
    {
       double pot, p =2.0*k+1.0;
       pot = pow(x,p);
       return pot;
    }
     
     
    int main()
    {
         double x,z,div,sum =0;
         int n,k,sgn = -1;  //
     
         printf(" Entrer l angle z: ");
    	  scanf("%lf", &z);
         printf("Entrez le nombre n: ");
    	  scanf("%i", &n);
    	  x = 3.14*z/180; // convertion du angle en radian
     
         for(k=0; k<=n; k++)
         {
              sgn = -1*sgn;          // jouer avec les signes qui alternent soit + ou -
              div = pt(x,k)/fact(k); // effectuer la division
              sum = sum + (sgn)*div; // additionner les termes.
         }
            printf("Resultat sin %f = %f ",z,sum);
        return 0;
    }

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Première chose à faire: Sépare mieux ton code. Mets tes calculs dans une fonction séparée du main(), fais-toi une fonction dédiée pour la factorielle...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 20
    Par défaut J ai modifié mais alors c est encore grave
    J ai modifié, seulement il affiche des fautes que je n arrive pas á retrouver

  4. #4
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Bonjour,

    Ce serait bien si tu postais la nouvelle version de ton code ainsi que les erreurs que tu obtiens.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par zero-un-assembler Voir le message
    Bonjour á tous,
    Je serais tres ravi de lire vos propositions d aides, je programme un exercice de Tp: il s agit de programmer cette suite sin(x)= (x^1)/1!-(x^3)/3!+(x^5)/5!-(x^7/7!)... Alors j ai programmer comme suite.
    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
    // la fonction factoriel
    int fact( int k)
    {
       double fkt = 1;
       for( int i=1; i<=(2k+1); i++)
          fkt = fkt*(i);
          return fkt;
    }
    
    int main()
    {
         double x,z,div,sum =0;
         int n,k,sgn = -1;  //
    
         printf(" Entrer l angle z: ");
    	  scanf("%lf", &z);
         printf("Entrez le nombre n: ");
    	  scanf("%i", &n);
    	  x = 3.14*z/180; // convertion du angle en radian
    
         for(k=0; k<=n; k++)
         {
              sgn = -1*sgn;          // jouer avec les signes qui alternent soit + ou -
              div = pt(x,k)/fact(k); // effectuer la division
              sum = sum + (sgn)*div; // additionner les termes.
         }
            printf("Resultat sin %f = %f ",z,sum);
        return 0;
    }
    seulement il calcule faux
    Salut

    Ta factorielle n calcule (2n+1). Donc factorielle 5 calculera 11! au lieu de 5!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 72
    Par défaut
    Bonsoir,

    Tu peux te passer de la factorielle et de la puissance si tu observes bien comment les termes évoluent : x - x^3/3! + x^5/5! -x^7/7! +...

    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
    #define _USE_MATH_DEFINES
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    int main()
    {
    	double x;//angle en radians
    	double y;//x au carré
    	double t;//le terme général
    	double z;//angle en degrés
    	double s;//la somme des n termes
    	int n;//le nombre de termes
    	int k;//le compteur
    	int i;//l'exposant de x
     
    	printf("Entrez l'angle z : ");
    	scanf("%lf", &z);
    	printf("Entrez le nombre de termes n : ");
    	scanf("%i", &n);
    	x = M_PI*z/180; // conversion de l'angle en radians
    	y = x*x;
    	s = x;
    	t = x;
    	i = 1;
    	for( k = 1; k < n; k++)
    	{
    		t = -t*y/((i+1)*(i+2));
    		s = s + t;
    		i = i + 2;
    	}
    	printf("Résultat obtenu sin( %f )= %1.18f\n ", z, s);
    	printf("avec la bibli sin( %f ) = %1.18f\n", z, sin(x));
    	system("pause");
    	return 0;
    }
    C'est pas très pédago de te livrer une solution toute faite donc petit exercice suplémentaire :
    Sachant que l'erreur de méthode est majorée par le premier terme négligé,
    modifier le programme pour que n désigne non pas le nombre de termes utilisés mais le nombre de décimales exactes.
    Exemple si tu t’arrêtes dans la somme à x^9/9! l'erreur est majorée par x^11/11! qui doit être inférieur à 10^(-n).

Discussions similaires

  1. aide programmation d'un quizz
    Par mattboul dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 11/02/2007, 10h07
  2. Aide programme C
    Par jordan49 dans le forum C
    Réponses: 8
    Dernier message: 02/10/2006, 07h35
  3. aide programmation en C
    Par luce2005 dans le forum C
    Réponses: 9
    Dernier message: 22/08/2006, 12h01
  4. aide programme debutant
    Par mator dans le forum C
    Réponses: 5
    Dernier message: 20/04/2006, 19h30
  5. PERL AIDE PROGRAMMATION
    Par kiza dans le forum Langage
    Réponses: 2
    Dernier message: 17/10/2005, 16h57

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