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 :

Codage C++ de Factoriel d'un nombre entier


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 19
    Par défaut Codage C++ de Factoriel d'un nombre entier
    Bonjour,

    Voila je voudrais savoir comment donner le resultat d'un nom factoriel en C++

    voila l'algo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    resultatFact : entier //init à 1
     
    debut
        POUR i de 1 à valeur FAIRE DEBUT
            resultatFact = resultatFact * i ;
        FINPOUR
    fin
    moi je pense faire comme sa mais je ne sais pas si c'est la meilleure solution

    codage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int i ;
    int valeur ;
    int resultatFact = 1 ;
    for(i = 1; i <= valeur){
        resultatFact = resultatFact * i ;
    }
    désole pour lecriture je ne peu pas activé le code html

    merci d'avance de votre aide

    Cordialement Arnaud

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 19
    Par défaut
    Voila j'ai modifier mon code j'obtient sa

    Codage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      int valeur = 10 ;
      int resultatFact = 1 ;
      int i ;
      for(i = 1; i <= valeur; i++) {
        resultatFact = resultatFact * i ;
      }
    voila et a koi sert le i++ je ne sais pas trop et j'aimerai savoir merci de votre aide

    Cordialement Arnaud

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Oui, c'est bien. Encadre le d'une fonction et ce sera parfait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int fact (int valeur) {
      int resultatFact = 1;
      for(int i = 1; i <= valeur; i++) {
        resultatFact *= i;
      }
      return resultatFact;
    }
    i++ est équivalent à i += 1
    i += a est équivalent à i = i + a

    Tu peux aussi coder la factorielle de manière récursive...

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Tous les langages nécessitent de savoir de quelle valeur faire varier une variable pour les boucle incrémentales...

    Certains permettent de dire qu'il faut prendre "toutes les valeurs comprises entre (x et y), mais ce n'est pas là le problème

    Le C et le C++ fournissent une série de raccourcis régulièrement utilisés pour représenter les opérations de base (addition, soustraction, multiplication et division, mais aussi "incrémentation" (addition de 1) et "décrémentation" (soustraction de 1))

    Ces raccourcis sont
    • Pour l'addition x+=valeur_a_ajouter (équivalent à x = x + valeur_a_ajouter)
      • i++ pour la "post incrémentation"
      • ++i pour la "pré incrémentation"
    • Pour la soustraction x-=valeur_a_soustraire (équivalent à x=x - valeur_a_soustraire)
      • i-- pour la "post décrémentation"
      • --i pour la "pré dércrémentation
    • Pour la multiplication x*=multiplicateur (équivalent à x = x * multiplicateur)
    • Pour la division x/=diviseur (équivalent à x = x / diviseur)

    à noter qu'il y a une nuance de taille entre pré et post incrémentation/décrémentation, mais que ca sort du contexte du problème et que tu reste malgré tout tout à fait libre d'utiliser l'équivalent quand il y en a

    Citation Envoyé par aoyou Voir le message
    Tu peux aussi coder la factorielle de manière récursive...
    Heuuu... Oui, mais non...

    Oui, dans le sens où il est tout à fait possible de le faire,

    Non dans le sens où la récursivité fait partie de ces techniques qui sont forts utiles quand elles sont nécessaires et catastrophique quand elles sont utilisées à mauvais escient...

    Elle est indispensable pour une gestion correcte et évolutive des "tours de Hannoï", et donc très utile dans ce cas là, mais peut tout à fait être remplacée de manière très avantageuse par une simple boucle pour ce qui est des calculs de factorielles, d'exponentielles et autre fonctions similaires...

    Dans de tels cas, cela revient à sacrifier inutilement des ressources qui pourraient être tellement utiles ailleurs (et c'est d'ailleurs le seul cas pour lequel j'estime utile de penser en "temps d'exécution" plutot qu'en "nombre d'exécution" )

    @theserialkiller10 ==>Si tu t'intéresse à la récursivité, tu peux aller voir sur mon site( @aoyou ==> impregne toi peut-être du contenu des §4 et §15 de la dite page )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 966
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 966
    Par défaut
    Luo,

    Je suis d'accord avec koala01 : la récursivité est un belle chose, mais mais quand on peut s'en passer sans trop de difficulté, il vaut mieux la laisser de côté.

    Le calcul de la factorielle est un cas typique où il faut faire de l'itératif, et c'est hélas un exemple classique dans les cours comme exercice d'application de la récursivité.

    ps : on s'en passe aussi très facilement pour les tours de Hanoi.

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Marrant... moi j'aurai codé la factorielle un peu différemment...
    Et, j'ai l'impression, un peu plus juste... Parceque dans le code précedant... 0! = 1 !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    long fact(long n)
    {
        long ret = n--;
        while (n>1) ret *= n--;
        return ret;
    }
    A noter que si ca se trouve le compilo fait exactement ça....

  7. #7
    screetch
    Invité(e)
    Par défaut
    Citation Envoyé par Wikipedia
    Par exemple :

    * 1! = 1
    * 2! = 1 × 2 = 2
    * 3! = 1 × 2 × 3 = 6
    * 10! = 1 × 2 × 3 × 4 × 5 × 6 × 7 × 8 × 9 × 10 = 3 628 800

    Par convention :

    0! = 1


    La définition de la factorielle sous forme de produit rend naturelle cette convention puisque 0! est un produit vide, c'est-à-dire réduit à l'élément neutre de la multiplication. Cette convention est pratique pour deux points :

    * Elle permet une définition récursive de la factorielle : (n+1)! = n! × (n+1) pour tout n.
    * Elle permet à de nombreux identifés en combinatoire d'être valides pour des tailles nulles. En particulier, le nombre d'arrangements ou de permutations de l'ensemble vide est égal à 1.
    quand a la recursivité, je n'ai pas de compilo sous la paluche mais la version recursive genere le meme code assembleur (a des details prets)

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

Discussions similaires

  1. script samba qui calcule le factoriel d'un nombre entier
    Par miryam22 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 30/05/2008, 10h00
  2. Inverser nombre entier de 4 chiffres
    Par zenattitude dans le forum Langage
    Réponses: 3
    Dernier message: 27/11/2005, 15h18
  3. Format des nombres entiers, séparateurs de milliers
    Par zazaraignée dans le forum Langage
    Réponses: 2
    Dernier message: 26/10/2005, 01h25
  4. nombre entier
    Par eleve36 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/10/2005, 16h25
  5. [LG]Former un nombre entier à partir de chiffre naturel.
    Par lecanardjaune dans le forum Langage
    Réponses: 2
    Dernier message: 12/11/2003, 22h36

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