Partage
  • Partager sur Facebook
  • Partager sur Twitter

calcul factoriel d'un nombre

Fonction factorielle

19 novembre 2015 à 21:17:40

Bonjour je fais appelle a votre aide pour vous demandez une explication sur un programme pour calculer le factorielle d'un nombre que j'ai pu trouver.
Merci d'avance de votre aide.
  • Partager sur Facebook
  • Partager sur Twitter
19 novembre 2015 à 21:49:46

Salut !

Qu'est ce que tu ne comprends pas ? As-tu vu la réccursivité ? La fonction factorielle est un parfait exemple pour apprendre ce concept.

Pour ce qui est du main, c'est la première fois que je vois ça en C ! (en même temps je n'ai que 3 ans d'expérience ;)) Mais, dans l'idée, il suffit de demander un nombre a l'utilisateur et d'afficher la factorielle de ce nombre.

  • Partager sur Facebook
  • Partager sur Twitter
19 novembre 2015 à 21:52:31

Oui j'ai bien vu la récursivité mais j'ai mal compris. si tu peut m'expliquer avec l'exemple que j'ai donné ? 3 ans d'expériences c'est déja plus que moi ^^!
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
19 novembre 2015 à 22:01:44

Hey,

Molx a écrit:

Pour ce qui est du main, c'est la première fois que je vois ça en C !

Pour main.

@LucLemaire1 Sinon, pour poster du code sur le forum, utilises </>. Aussi, ton code est écrit en C++ hein.

-
Edité par Anonyme 19 novembre 2015 à 22:02:25

  • Partager sur Facebook
  • Partager sur Twitter
19 novembre 2015 à 22:20:11

@ruquier, je voulais dire que c'est la première fois que je vois des chevrons utilisés de cette manière :)

@LucLemaire1, on va dire qu'on veut calculer la factorielle de 4.

On va donc calculer fact(4), or fact(4) = fact(3) * 4. Seulement il faut maintenant calculer fact(3), qui lui même vaut fact(2) * 3 ! De la même manière : fact(2) = fact(1) * 2. Et que voyons nous ? fact(1), on sait que c'est égal à 1 ! Donc va pouvoir calculer fact(2), qui permettra de calculer fact(3), qui permettra a son tour de calculer fact(4).

Pour résumer :

- On veut fact(4)

- On passe par fact(3) * 4. On veut fact(3)

- On passe par fact(2) * 3. On veut fact(2)

- On passe par fact(1) * 2. On veut fact(1), et on l'a déjà, c'est notre axiome en quelque sorte. Donc fact(1) = 1.

- On calcule fact(2) = fact(1) * 2 = 1 * 2 = 2;

- On calcule fact(3) = fact(2) * 3 = 2 * 3 = 6;

- On calcule fact(4) = fact(3) * 4 = 6 * 4 = 24;

Par rapport à l'algorithme, plutôt que de traiter directement fact(n), il va traiter fact(n-1). Et il continuera de faire ça tant que n est différent de 1. Quand n == 1, le programme renvoie les valeurs les unes après les autres comme vu ci dessus. C'est un programme qui s'appelle lui même, donc ça peut paraître compliqué, mais tu peux chercher des schéma, ou des cours sur openclassroom.

Fais des recherches, cette notion est très utile :)

  • Partager sur Facebook
  • Partager sur Twitter
19 novembre 2015 à 22:23:30

Ok pas de problème je vais faire des recherches, merci pour l'explication et ta disponibilité.
  • Partager sur Facebook
  • Partager sur Twitter
20 novembre 2015 à 1:47:44

Ce code est du (mauvais) C++, pas du C. Si on veut le ré-écrire en C (sans gestion d'erreurs), ça donnerait ça:

#include <stdio.h>

unsigned int
fact(unsigned int n)
{
    if (n == 0)
    {
        return 1;
    }

    return n * fact(n - 1);
}

/*
** Ou encore:
**
** unsigned int
** fact(unsigned int n)
** {
**     return n == 0 ? 1 : n * fact(n - 1);
** }
*/

int
main(void)
{
    puts("Insérez un nombre:");

    unsigned int n;

    scanf("%u", &n);
    printf("fact(%u) = %u\n", n, fact(n));
}

-
Edité par Mad scientist 20 novembre 2015 à 1:49:07

  • Partager sur Facebook
  • Partager sur Twitter
Un vrai cours de: (C | C++ | Haskell débutant | Haskell intermédiaire | Rust).
25 avril 2023 à 9:05:54

11. Calcul de la factorielle : Le programme demande à l'utilisateur d'entrer 10 nombre et calcule sa factorielle. Et fait la division successive de c différents factorielle de Tél en sorte que le tt premier et diviser par le suivant, jusqu'au dernier.
  • Partager sur Facebook
  • Partager sur Twitter
25 avril 2023 à 10:04:26

Bonjour,

Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

Pour plus d'informations, nous vous invitons à lire les règles générales du forum

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter

Pas d'aide concernant le code par MP, le forum est là pour ça :)