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 :

Factorielle d'un nombre


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 16
    Points
    16
    Par défaut Factorielle d'un nombre
    Bonjour,

    Voici ma foncion factorielle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int fct_Factoriel( int nbr)
    {
        int i=0, resultat = 1;
     
        for (i=2; i<=nbr; i++)
        resultat = resultat*i;
     
        return resultat;
    }
    Ma question est comment intervient la variable integer i dans le calcule de la factorielle.
    Voila ce que je comprend, on a une boucle for on initialise i a 2, la condition de la boucle est tant
    que i est <ou= a nbr on realise la boucle, puis j'incrémente i a chaque boucle.
    Merci

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Mia,

    "i" sert de compteur pour la boucle.
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    ok i sert de compteur. mais comment intervient ce compteur incrémenter a chaque boucle dans la formule de la factorielle qui est n! = n x (n-1) x ... x 1. Merci droggo pour la 1er réponse.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est plus compréhensible si tu vois la formule en tant que n! = 1 × 2 × 3 × ... × n
    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.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    C'est plus compréhensible si tu vois la formule en tant que n! = 1 × 2 × 3 × ... × n
    donc a chaque boucle voila ce qui se passe, nbr choisi = 5.
    5 ! = ?

    1 er boucle : 5! = 5 x 2

    2 em boucle : 5! = 5 x 2 x 3

    3 em boucle : 5! = 5 x 2 x 3 x 4

    4 em boucle : ???

    5 em boucle : ???

    es-ce que je doit tjrs prendre la derniere boucle en
    consideration avec une boucle for ?

    Merci de votre réponse,

    Kumral

  6. #6
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 639
    Points : 2 347
    Points
    2 347
    Par défaut
    Ingénieur ? Il faut vous réveiller. Un collégien d'intelligence moyenne devrait être capable de comprendre ce code correctement...

    C'est à dire :

    initialisation : resultat = 1

    itération i = 2 : resultat = 1 x 2
    itération i = 3 : resultat = 1 x 2 x 3
    itération i = 4 : résultat = 1 x 2 x 3 x 4
    itération i = 5 : résultat = 1 x 2 x 3 x 4 x 5

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par CodeurPlusPlus Voir le message
    Ingénieur ? Il faut vous réveiller. Un collégien d'intelligence moyenne devrait être capable de comprendre ce code correctement...

    C'est à dire :

    initialisation : resultat = 1

    itération i = 2 : resultat = 1 x 2
    itération i = 3 : resultat = 1 x 2 x 3
    itération i = 4 : résultat = 1 x 2 x 3 x 4
    itération i = 5 : résultat = 1 x 2 x 3 x 4 x 5
    Oui c'est vrai . Mais il y a quand même des cours
    ou je m'en sort bien.

    Merci beaucoup pour votre réponse.
    J'ai compris comment ça fonctionne.

    Kumral

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Merci de cliquer sur le bouton en bas de la page si vous n'avez plus de question sur ce sujet.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Merci de cliquer sur le bouton en bas de la page si vous n'avez plus de question sur ce sujet.

    Bonjour,

    J'ai une question : la variable introduire en integer ne permet pas de calculer
    une factorielle au delà de 12. donc au delà de 12!.

    J'aimerais introduire cette variable en long, mais comment faire et es-ce que je
    doit changer le scanf en conséquence. Donc remplacer le %d par autre chose.

    Merci d'avance pour votre réponse,

    Kumral

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu peux garder le paramètre en int, vu que seule la variable utilisée pour les calculs a besoin d'être plus grosse.
    Ici, il suffit de déclarer resultat en long long (voire unsigned long long pour gagner un bit, vu que toutes les factorielles sont positives).
    Cela permet de monter jusqu'à 20! au minimum.
    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.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Tu peux garder le paramètre en int, vu que seule la variable utilisée pour les calculs a besoin d'être plus grosse.
    Ici, il suffit de déclarer resultat en long long (voire unsigned long long pour gagner un bit, vu que toutes les factorielles sont positives).
    Cela permet de monter jusqu'à 20! au minimum.
    Bonjour,

    Je pense que la mémoire vive de mon pc portable 4 GB DDR3 ne permet pas
    de stocker une factorielle de plus de 12!. Même en entrent une variable long long resultat.
    Es ce que c'est possible?

    Kumral

  12. #12
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    J'aimerais introduire cette variable en long, mais comment faire et es-ce que je
    doit changer le scanf en conséquence. Donc remplacer le %d par autre chose.
    RTFM

    Citation Envoyé par Kumral Voir le message
    Je pense que la mémoire vive de mon pc portable 4 GB DDR3 ne permet pas
    de stocker une factorielle de plus de 12!. Même en entrent une variable long long resultat.
    Es ce que c'est possible?



    Un unsigned long long est codé sur au moins 8 octets donc il peut prendre des valeurs entre 0 et 2^(8*8) - 1 soit 1,44.10^19 (cf FAQ ).
    20! = 2,43.10^18 < 1,44.10^19 donc 8 octets est suffisant pour stocker cette valeur. Ta mémoire RAM peut stocker tout de même 4*1024*1024*1024 octets soit 4 294 967 296 octets.
    Sachant que 8 << 4 294 967 296 octets, je comprend mal ta question...

    Après, si tu ne veux pas avoir un précision parfaite, tu peux aussi utiliser des long doubles (~12 octets) pour avoir de plus grands nombres qui peuvent aller jusqu'à 3.4*104932 si je ne me trompe pas.

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Kumral Voir le message
    Je pense que la mémoire vive de mon pc portable 4 GB DDR3 ne permet pas
    de stocker une factorielle de plus de 12!. Même en entrent une variable long long resultat.
    Es ce que c'est possible?
    Bonjour

    Il ne faut pas confondre "représenter un nombre valant 12!" et "stocker 12! nombres" !!!

    Pour représenter (ou mémoriser) un nombre stocké sur 8 octets il faut... 8 octets.

    En revanche, pour stocker 12! nombres, si chaque nombre fait 8 octets, il faut 479001600 * 8 soit 3 832 012 800 soit approximativement 3.6Gb de mémoire (ce qui ira encore pour ton PC).

    De plus, il ne faut pas oublier que tous les OS modernes possèdent un outil appelé "mémoire virtuelle". Il s'agit de blocs mémoires enregistrés sur disques et qui sont chargés en mémoire vive quand le programme en a besoin (la mémoire précédente étant de son coté enregistrée sur disque avant d'être écrasée ; dans une opération appelée "swap"). C'est un peu long mais ça permet de faire tourner des programmes utilisant beaucoup plus que 4Gb. Sinon je me demande comment tu pourais faire tourner des jeux comme World of Warplane ou Call of Duty (qui font bien d'autres choses que simplement calculer 12!)...
    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]

  14. #14
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    Merci de votre aide.

    Kumral

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

Discussions similaires

  1. Codage C++ de Factoriel d'un nombre entier
    Par theserialkiller10 dans le forum C++
    Réponses: 23
    Dernier message: 24/10/2007, 16h50
  2. Prog pour calculer la factorielle d'un nombre
    Par Lenezir dans le forum Langage
    Réponses: 2
    Dernier message: 11/05/2007, 09h42
  3. factoriel d'un nombre N
    Par vladimire dans le forum C
    Réponses: 9
    Dernier message: 01/12/2006, 12h42
  4. Calcul de la factorielle d'un nombre naturel
    Par Sadgunner dans le forum Pascal
    Réponses: 9
    Dernier message: 20/06/2006, 21h56
  5. factoriel d'un nombre
    Par etoile1506 dans le forum C
    Réponses: 10
    Dernier message: 03/12/2005, 15h46

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