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 :

Fonction somme d'une puissance et factorielle


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 169
    Par défaut Fonction somme d'une puissance et factorielle
    bonjour,

    Je cherche à resoudre une fonction mathematique:

    S= somme ( XpuissanceI / Factorielle I) (i allant de 0 à n)

    j'ai tester la fonction factoriell, appart, et ca marche! pareil pour puissance!
    je veux les regrouper ensemble dans une seule fonction!! mais j'arrive âs à le faire



    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
    #include <stdio.h>
    #include <stdlib.h>
     
     
    int factorielle(int n)
    {
        int i; /*compteur de boucle*/
        int valeur = 1;
     
        if(n==0)
            return 1;
        else
            for(i= 1; i <= n; i++)
                valeur *= i;
     
        return valeur;
    };
     
     
     
    int Puissance(int p,int b)
    {
     
          float r=1;
          for(int i=0;i<b;i++)
          r*=p;
          return r;
     
    }
     
    int main(void)
    {
         int p,i,somme,x,b;
     
         while(x<0)
         {
         printf("Donnez un nombre entier positive de la somme x \n");
         scanf("%d",&x);
         }
     
         printf("Donnez la nombre de la puissance p \n");
         scanf("%d",&p);
     
         for (i=0;i<=x;i++)
         {
         somme = somme + (Puissance(p,i)/Factoriel(i));
         }
         printf("la somme est : %d \n",somme);
     
     
     
         system("PAUSE");
         return 0;
    }

    Voici le code Factorielle qui fonctionne appart:
    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
    #include <stdio.h>
    #include <stdlib.h>
     
     
    int factorielle(int n)
    {
        int i; /*compteur de boucle*/
        int valeur = 1;
     
        if(n==0)
            return 1;
        else
            for(i= 1; i <= n; i++)
                valeur *= i;
     
        return valeur;
    };
     
     
     
    int main()
    {
        int n, reponse;
     
        printf("entrer n s'il vous plait \n");
        scanf("%i" , &n);
     
        reponse = factorielle(n);
     
        printf("%i factorielle vaut %i \n" , n , reponse);
        system("PAUSE");
        return 0;
    }


    Code puissance:

    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
    #include <stdio.h>
     
    float puissance(float, int);
    int main()
    {
    int RN=0;
    do 
    {
        float x,res;
        int puis;
        do
        {
        printf("Entrer x \n");
        scanf("%f",&x);
        printf("Entrer puis \n");
        scanf("%d",&puis);
        }
     
    while (x==0 && puis==0);
    res=puissance(x,puis);
    printf("%f puissance %d=%f\n",x,puis,res);
    /*printf("Si vous voulez réutilsé le prog, entrer la valeur 1\n");*/
     
    scanf("%d",&RN);
     
    }
    while (RN==1);
    printf("Merci d'avoir utilser le prog \n");
    return 0;
    }
    float puissance (float a, int b)
     
    {
          float r=1;
          for(int i=0;i<b;i++)
          r*=a;
          return r;
    }
    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 142
    Par défaut
    Salut,

    Si tu est sur à 100% que t'es fonction fonctionnent correctement alors pourquoi ne pas faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    long double ma_fonction(int a, int b, int c)
    {
         long double Somme=0;
         unsigned int i=0;
     
         for ( i = 0 ; i < n ; i++ )
         {
               Somme += puissance(a,b)/factorielle(n);
         }
     
     
         return Somme;
    }

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main(void)
    {
         int p,i,somme,x,b;
    ....  
         for (i=0;i<=x;i++)
         {
         somme = somme + (Puissance(p,i)/Factoriel(i));
         }
    ....
    L'erreur dans ce code est que somme n'a pas été initialisé à 0

    Si ton but est de calculer S= somme ( XpuissanceI / Factorielle I) (i allant de 0 à n), il est peu astucieux de faire une fonction puissance et une fonction factorielle et utiliser le code que tu proposes :
    En effet, quand tu calcules le terme de rang i, la fonction puissance calcule en fait la puisssance au rang i-1 et rajoute une multiplication pour obtenir la puissance au rang i. Or la puissance au rang i-1 a déja été calculée quand on a calculé le terme de rang i-1. De même pour la factorielle. En fait, tu passes ton temps à refaire des calculs que tu avais déja fait!

    Il est préférable de trouver une relation entre le terme de rang i, T(i), et celui de rang i-1, T(i-1).
    Dans ce cas T(i) = p^i/i! = p p^(i-1)/i/(i-1)! = p/i T(i-1)
    A partir d'un terme, il suffit donc de faire une multiplication et une division pour obtenir le terme suivant.

  4. #4
    Membre éclairé
    Avatar de Wachter
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2008
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 404
    Par défaut
    Bonsoir,

    Comme l'a bien dit diogene, au lieu de calculer les mêmes termes plusieurs fois, en appelant les fonctions Puissance() et Factorielle(), il vaudrait mieux trouver la relation qui relie le terme i et le terme i - 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    i! = i * (i - 1)!
    p^i = p * p^(i - 1)
    Ce qui donnera le code suivant :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    factorielle = 1;
    puissance = 1;
    somme = 1;
     
    for (i = 1; i <= n; i++)
    {
      factorielle *= i;
      puissance *= p;
      somme += puissance / factorielle;  
    }

    --
    Wachter

Discussions similaires

  1. fonction somme dans une requete
    Par selmaa dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 19/05/2011, 14h51
  2. Réponses: 1
    Dernier message: 23/10/2007, 09h37
  3. fonction power avec une puissance non entière
    Par atshoom dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 27/06/2007, 03h30
  4. [Excel] fonction SOMME.SI avec une cellule pour critère
    Par repié dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/03/2006, 17h39
  5. Réponses: 6
    Dernier message: 09/02/2006, 19h00

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