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 :

Fonctions


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 2
    Par d�faut Fonctions
    Salut � tous,
    Voil� j'essaye de comprendre un peu la programmation, et oui je d�bute...
    Pour �� j'ai lu pas mal de tutos du site et des bouquins et maintenant j'essaye de faire quelques exercices.
    Cependant je bloque compl�tement sur un.
    J'explique:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Considérons la fonction factorielle présentée dans votre cours (bouquin).
    Cette fonction peut s'écrire en C++ de la manière suivante:
    int factorielle( int n )
    {
       if( n == 1 )
          return 1;
       else
          return ( n * factorielle ( n - 1 ) );
    }
     
    1) Expliquez comment s'effectue le traitement de la fonctorielle de 5 à partir de la fonction précédente.
    2) Quel est le résultat obtenu ?
    Si des personnes arrivaients � bien m'�clairer sur cet exercice pour que je puisse approfondir dans la compr�hension de l'exercice.
    Merci d'avance
    PS: Je veut pas de r�ponses, ce serait trop facile, juste un �claircissement ou un d�but d'expliquation.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 63
    Par d�faut
    1/ Pour 5 :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int factorielle( int n )
    {
       if( n == 1 )
          return 1;
       else
          return ( n * factorielle ( n - 1 ) );
    }
    resultat = 5*fact(4*(fact(3*(fact(2*fact(1))))

    2/ ce qui te donne 5*4*3*2*1=120

    C'est ce que l'on appelle une fonction Recursive (qui s'appelle elle meme)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 2
    Par d�faut
    Merci beaucoup, je vais approfondir � partir de ca

  4. #4
    Membre �m�rite
    Profil pro
    Inscrit en
    Ao�t 2003
    Messages
    835
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 835
    Par d�faut
    Juste pour apporter mon grain de sel : effectivement c'est une fonction r�cursive, mais ta maniere de la "deplier" freddy766 est completement fause je pense.

    je cite : "resultat = 5*fact(4*(fact(3*(fact(2*fact(1))))"

    ne donne pas du tout 5*4*3*2*1 .

    A mon avis tu ne d�plies pas une fonction r�cursive aussi simplement que �a, mais bon je chipote on a tous compris ce que tu voulais dire .

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 63
    Par d�faut
    Effectivement, si tu veux etre plus pointilleux, voila ce que cela te donne :

    fact(5)= 5 * fact(5-1) <=> 5 * fact(4)

    fact(4)= 4 * fact(4-1) <=> 4 * fact(3)

    fact(3)= 3 * fact(3-1) <=> 3 * fact(2)

    fact(2)= 2 * fact(2-1) <=> 2 * fact(1) <=> 2 * 1
    du � d'ou a la fin :
    fact(5) = 5 * (fact(4))
    = 5 * (4 * fact(3))
    = 5 * 4 * (3 * fact(2))
    = 5 * 4 * 3 * (2 * fact(1))
    = 5 * 4 * 3 * 2 * (1)
    = 120

    Don't forget "TAG" R�SOLU

  6. #6
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Concernant la fonction en elle-m�me, elle oublie le cas n = 0 (0! = 1), et si tu ne prends pas des entiers non-sign�s en param�tre tu vas te retrouver avec des r�cursions infinies pour les nombres n�gatifs.

    [hors-sujet]
    Truc fun : en C++ on peut �crire la factorielle de sorte qu'elle soit calcul�e par le compilo, donc avant l'execution du programme
    [/hors-sujet]

  7. #7
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    256
    D�tails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juin 2002
    Messages : 256
    Par d�faut
    loulou24 : pourrais tu donner un exemple stp ? ca m'interesse

  8. #8
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    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
    14
    template <int N> struct Fact
    {
        enum {Value = N * Fact<N - 1>::Value};
    };
    template <> struct Fact<0>
    {
        enum {Value = 1};
    };
    template <> struct Fact<1>
    {
        enum {Value = 1};
    };
     
    int x = Fact<5>::Value;
    Et on peut faire pareil pour un certain nombres de formules calculables r�cursivement.

  9. #9
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    256
    D�tails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juin 2002
    Messages : 256
    Par d�faut
    merci.

  10. #10
    Membre chevronn�
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Par d�faut
    salut,
    en reprennant le prog de GroSbiLL il suffit de rajouter un ou exclusif pour la valeur 0 comme ceci :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    int factorielle( int n ) 
    { 
       if(( n == 1 )||(n == 0)) 
          return 1; 
       else 
          return ( n * factorielle ( n - 1 ) ); 
    }
    et c'est tout.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 63
    Par d�faut
    En fait, il te suffit simplement de faire :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int factorielle( int n )
    {
       if(n == 0)
          return 1;
       else
          return ( n * factorielle ( n - 1 ) );
    }

  12. #12
    Membre chevronn�
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Par d�faut
    oui, tr�s juste freddy766 en effet le cas du 1 est g�r� dans le 'else'.

  13. #13
    Membre confirm�

    Inscrit en
    Mai 2003
    Messages
    39
    D�tails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 39
    Par d�faut
    Et le cas du 0 ?
    Vu que 0! = 1, ce code est inexact, et pire, il risque � coup sur de faire exploser la pile...

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 63
    Par d�faut
    2 reponses auparavant, tu peux voir que le cas de 0 est trait� :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    if(n == 0)  return 1;

  15. #15
    Membre chevronn�
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Par d�faut
    je pense qu'il faut lire thread jusqu'au bout avant de se pr�cipiter � r�pondre.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Fonction API
    Par margilb dans le forum C++Builder
    R�ponses: 2
    Dernier message: 08/07/2002, 11h11
  3. Impl�mentation des fonctions math�matiques
    Par mat.M dans le forum Math�matiques
    R�ponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    R�ponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    R�ponses: 4
    Dernier message: 15/05/2002, 20h07

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