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 :

factoriel


Sujet :

C++

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut factoriel
    bonjour
    je cherche a programmer une fonction qui a pour role de caluculer factoriel de n mais cette fonction est
    particuliere par ex pour n=7, elle fera
    1*3*5*7 et pour n=4 elle fera 2*4
    c est en C++ si qqun peut m aider
    merci Dan

  2. #2
    Membre averti Avatar de piff62
    Inscrit en
    Décembre 2003
    Messages
    431
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Décembre 2003
    Messages : 431
    Points : 417
    Points
    417
    Par défaut
    Ce n'est donc pas la fonction factorielle de n si tu ne fais pas n*n-1*n-2..*2*1
    Pour qu'on puisse aider explique nous comment tu sais quel multiplication tu dois faire

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    voila la fonction qui faut que je calcule est :
    n!! = pour des nombres paires 2*4*6*8*........*n
    = pour des nombres impaires 1*3*5*7*.....*n


    voici ce que j ai fait :

    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
    #include <iostream>
     
    using namespace std;
     
     
    int dfac (int &n){
      int fac=1, i;
       if (n%2==0){
         for (i=0;i<=n;i++)
           fac=fac*n;
           n=n*2;
      }
     
       else {
         for (i=0;i<n;i++)
           fac=fac*n;
           n=n-2;
       }
     
     return fac;
    }
    int main(){
      int n;
      cout << "Entre une veleur n dont tu veux calculer n!!:" << endl;
      cin >> n;
      int dfac (int &n);
      cout << n << "!!= " << dfac (n) << endl;
      return 0;
    }
     ca ne fonctionne pas expliquez moi svp mes erreurs en rouge 
    merci
    Dan

  4. #4
    Membre averti Avatar de piff62
    Inscrit en
    Décembre 2003
    Messages
    431
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Décembre 2003
    Messages : 431
    Points : 417
    Points
    417
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int dfac (int &n)
    {
      int fac=1, i;
       if (n%2==0) // alors ton nombre est pair
    {
         for (i=2;i<=n;i+=2) // on commence a 2 .. car si on commence a 0 .. 0*n'importe quoi egal 0
           fac=fac*n;
      }
       else { // le nombre est imair
         for (i=1;i<=n;i+=2)
           fac=fac*n;
       }
    Perso je ferai un truc du genre .. essais et tiens moi au courant

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    tu peux m explique ce qui ne vas pas chez moi ?
    pourquoi tu mets & quand du declare la fonction a la variable ?
    Merci

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Pas besoin de if si tu pars de n... (attention quand même aux conditions aux limites -- pascompliqué pour autant)

    (Prendre le paramètre par référence n'a aucun sens)
    (Déclarer dfac dans le main() ne sert à rien. Il est déjà défini, contente-toi de l'utiliser)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    Membre averti Avatar de piff62
    Inscrit en
    Décembre 2003
    Messages
    431
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Décembre 2003
    Messages : 431
    Points : 417
    Points
    417
    Par défaut
    Les & ne sont pas du tout necessaire ici .. tu peux les enlever !
    L'appel a la fonction se ferait ainsi :
    L'entete de la fonction serait
    Les & sont a utiliser avec precaution ! car c'est pour passer l'adresse memoire .. donc pour des int .. autant les passes directement !
    Et pour le reste c'es comme je te l'ai mis avant !
    j'ai pratiquement rien change .. sauf que au lieu de faire i++ dans le for .. j'ai fais i+=2
    Ce qui veut dire qu'on increment i de 2 a chaque passage dans la boucle (c'est bien ce qu'on veut .. avoir que les nombres pairs ou que les nombre impair)

  8. #8
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Bonjour,

    j'ai pas tout lu, mais pourquoi pas une fonction récursive ?
    si mes souvenirs sont bons, c'est pas le plus efficace en temps de calcul, mais c'est facile à programmer dans le cas présent.


    Enjoy yourself !

  9. #9
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    non ?

    je pensais à ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    unsigned int f(unsigned int n)
    {
    	if (n<=1)
    		return 1;
     
    	unsigned int m = (n-2)>0 ? n-2 : 1;
    	return n*f(m);
    }

    Enjoy yourself !

  10. #10
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Le deuxième test est inutile car englobé par le premier.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  11. #11
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    correct.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    unsigned int f(unsigned int n)
    {
       if (n<=1)
          return 1;
     
       return n*f(n-2);
    }


    Enjoy yourself !

  12. #12
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Si on veut aider le compilateur à optimiser la récursivité, il peut être utile de la transformer en récursivité terminale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    unsigned int f(unsigned int n)
    {
      return f1 (n, 1);
    }
     
    unsigned int f1(unsigned int n, unsigned int a)
    {
       if (n<=1)
          return a;
     
       return f1(n-2, n*a);
    }
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  13. #13
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    tu peux m'expliquer ?



    Enjoy yourself !

  14. #14
    Membre averti Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 404
    Points
    404
    Par défaut
    Bonjour,

    je voulais juste dire que la fonction décrite par gruni1 n'est pas une factorielle simple mais une multi-factorielle. Plus précisément, dans le cas de gruni1, il s'agit d'une multi-factorielle sur les nombres paires ou impaires.

    Factorielle simple : n! = (n)(n-1)(n-2)(n-3).....(1)
    Multi-Factorielle paire : n!! = (n)(n-2)(n-4).....(2) avec n paire
    Multi-Factorielle impaire : n!! = (n)(n-2)(n-4).....(1) avec n impaire

    (notez bien le double emploi du point d'exclamation).

    Voici un lien vers un site qui détaille les multi-factorielles et primorielle (factorielle de nombres premiers).

    http://membres.lycos.fr/villemingera...r/primorie.htm

    Voila.

    Flo.

  15. #15
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par bigboomshakala
    tu peux m'expliquer ?
    Par exempe : http://cermics.enpc.fr/polys/info1/main/node22.html
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  16. #16
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par JolyLoic
    Citation Envoyé par bigboomshakala
    tu peux m'expliquer ?
    Par exempe : http://cermics.enpc.fr/polys/info1/main/node22.html
    merci



    Enjoy yourself !

Discussions similaires

  1. [Débutant][Conception] Factorielle en Java par recursivité
    Par Sylvester dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 02/11/2008, 20h42
  2. factoriel d'un nombre
    Par etoile1506 dans le forum C
    Réponses: 10
    Dernier message: 03/12/2005, 15h46
  3. Calcul du factorielle
    Par knecmotet dans le forum C
    Réponses: 15
    Dernier message: 16/09/2005, 11h33
  4. Chaine des caractères et factorielle
    Par ixterm dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 03/05/2005, 08h33
  5. fonction qui calcule la factorielle ?
    Par piff62 dans le forum C
    Réponses: 8
    Dernier message: 27/02/2005, 11h00

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