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 :

Calcul du factorielle


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 39
    Par défaut Calcul du factorielle
    Bonjour à tous j'ai le programme suivant :
    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
     
    include <stdio.h>
    #include <math.h>
     
    long int factorielle(int);
     
    int main(void)
    {
    	int n;
    	long int f;
    	printf("n.....");	
    	scanf("%d",&n);
    	f=factorielle(n);
    	if(n>0)
    		printf("n!....%d\n",f);
    	else 	printf("0!....%d\n", 1);
    }
     
    long int factorielle(int n)
    {
    	int i=0;
    	long int temp=n;
    	while(i<=n-2)
    	{
    		i=i+1;
    		temp=temp*(n-i);
    	}
    	return temp;
    }
    qui calcul le factorielle d'un entier. Mon problème est que mon programme ne sait pas calculer le factorielle d'un entier au-delà de n=31. Que puis-je faire pour passer outre cette limite ?

    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 277
    Par défaut
    Utiliser une bibliothèque de gestion des grands nombres ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 39
    Par défaut
    Oui mais laquel ? je n'en connais aucune

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par knecmotet
    Oui mais laquel ? je n'en connais aucune
    BigNum, par exemple. est ton ami...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 39
    Par défaut
    Ok merci !

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Déjà prend des unsigned tu iras un peu plus loin mais pas beaucoup sans doute
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    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
    31! Est déja sur 64 bits, le seul fait de multiplier par 32 le fera complètement déborder, signe ou pas signe...
    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.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 142
    Par défaut
    C'est pas mieux de calculer le factoriel avec une fonction récursive ?

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par tomasha
    C'est pas mieux de calculer le factoriel avec une fonction récursive ?
    La récursivité çaÿ mal.

  10. #10
    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
    Je pense que non, et que ce serait plus lourd, d'ailleurs (n fois l'overhead d'appel de fonction...)
    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 éprouvé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 142
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    La récursivité çay mal.
    Hein?
    Tu veux dire "c'est mal" ?
    Encore une chose que j'ignorais

  12. #12
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,
    Citation Envoyé par tomasha
    Citation Envoyé par Emmanuel Delahaye
    La récursivité çay mal.
    Hein?
    Tu veux dire "c'est mal" ?
    Encore une chose que j'ignorais
    En fait la récursion est dangereuse puisqu'à chaque appel de fonction, on rempli la pile avec les paramètres donc si le nombre d'appels est trés grand, on peut dépasser la capacité de la pile, dans ce cas le système apprécie rarement. Sachant que le nombre d'itérations n'est généralement pas connu (et difficilement controlable) et comme la solution avec une boucle est toujours possible, il vaut mieux l'utiliser!

  13. #13
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    La récursivité est peut-être "mal" mais c'est qu'en même une bonne chose que de savoir écrire du récursif, (et encore mieux de savoir dérécursiver !)
    Maintenant, si le but est de calculer 2 048 576 ! effectivement, il ne vaut peut-être mieux pas faire du récursif.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  14. #14
    Rédacteur

    Profil pro
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 113
    Par défaut Re: Calcul du factorielle
    Citation Envoyé par knecmotet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    	f=factorielle(n);
    	if(n>0)
    		printf("n!....%d\n",f);
    	else 	printf("0!....%d\n", 1);
    [HS]

    Je pense que ça serai mieux d'appeler ta fonction dans le if comme ça si n<=0 t'aura pas à l'appeler sans raison..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(n>0) printf("n!....%ld\n",factorielle(n));
    else printf("0!....%d\n", 1);
    [/HS]

  15. #15
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par Trap D
    La récursivité est peut-être "mal" mais c'est qu'en même une bonne chose que de savoir écrire du récursif, (et encore mieux de savoir dérécursiver !)
    Bien sûr que c'est utile, généralement, je commence par écrire une fonction sous forme récursive puis, une fois que ça marche, je la transforme sous la forme d'une boucle. Maintenant il y a surement des problèmes récursifs trés difficile à passer en bouce mais ça c'est le problème du forum algo

  16. #16
    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
    Il faut dire que parfois, il faut soit programmer en récursif, soit émuler soi-même une pile... C'est le genre de cas où l'on préfère se servir de la pile existante... (je pense à des parcours d'arbres, notamment...)
    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.

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

Discussions similaires

  1. Calculer la factorielle en java?
    Par inptiste1987 dans le forum Débuter avec Java
    Réponses: 20
    Dernier message: 07/11/2018, 23h02
  2. 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
  3. exception dans un calcul de factorielle
    Par ranell dans le forum Langage
    Réponses: 6
    Dernier message: 21/10/2007, 19h01
  4. Prog pour calculer la factorielle d'un nombre
    Par Lenezir dans le forum Langage
    Réponses: 2
    Dernier message: 11/05/2007, 09h42
  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