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

Algorithmes et structures de données Discussion :

Compréhension de l'algorithme de calcul de la factorielle


Sujet :

Algorithmes et structures de données

  1. #1
    Candidat au Club
    Compréhension de l'algorithme de calcul de la factorielle
    Bonsoir à tous je suis un étudiant débutant dans le domaine informatique
    Je suis tombé sur un exercice en-ligne sur l'algorithmique après plusieurs heures de réflexion dessus j'ai du mal à comprendre
    Pourriez vous m'expliquer ligne par ligne afin d'éclairer mes zones d'ombres svp!!

    Voici l'algorithme :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Var n, i, f: entiers
    Début 
    Écrire  "entrez un nombre:" 
    Lire n
    f=1 
    Pour i=2 à n
    F=f*i
    I=i+1
     
    Écrire "la factorielle est:" F
     
    Fin pour
    Fin

  2. #2
    Membre chevronné
    Compréhension de l'algorithme de calcul de la factorielle
    Bonjour,

    Citation Envoyé par FrancisTita Voir le message
    ... Var n, i, f: entiers
    Début
    Écrire "entrez un nombre:"
    Lire n
    f=1
    Pour i=2 à n
    F=f*i
    I=i+1

    Écrire "la factorielle est:" F

    Fin pour
    Fin
    Question: les variables (f et F) d'une part, (i et I) d'autre part sont-elles identiques ?
    Si oui, l'incrémentation
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    i:= i + 1
    est incompatible avec l'énoncé de la boucle
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Pour i=2 à n
    .
    Si non, (f) restera égal à sa valeur initiale (1), et (F) prendra les valeurs successives (2, 3 ... n) ... et les variables (F, I) n'auront pas été déclarées.

    Le pseudo-code ne serait-il pas plus tôt:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Var n, i, f: entiers
    Début 
    Écrire  "entrez un nombre:" 
    Lire n
    f=1 
    Pour i=2 à n
    f=f*i
    Fin pour
    Écrire "la factorielle est:" F
    Fin


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  3. #3
    Candidat au Club
    Ouais c'est ça

  4. #4
    Membre chevronné
    Compréhension de l'algorithme de calcul de la factorielle
    En reprenant la nouvelle version du code:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Début 
    Écrire  "entrez un nombre:" 
    Lire n on affecte à la variable (n) une valeur entière arbitraire (qui doit dépasser (1);
    f=1 on affecte à la variable (f) la valeur (1);
    Pour i=2 à n (i) prend successivement les valeurs: 2, 3, 4 ... n ;
    f=f*i c'est le coeur du programme: (f) se voit affecter la nouvelle valeur: f = fvaleur précédente*ivaleur actuelle
    Fin pour
    Écrire "la factorielle est:" F
    Fin


    À toi de détailler ce qui se passe ...


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  5. #5
    Membre éclairé
    Traiter les cas particuliers
    Bonjour,

    1/ Les variables déclarée sont entières. Elles peuvent donc être négatives. Il faut s'en assurer et, le cas échéant, définir le retour.

    2/ Selon le langage qui sera utilisé, le comportement de la boucle peut être différent pour les valeurs 0 ou 1. Heureusement, la plupart ne passeront dans la boucle (quelques fois avec génération d'une erreur) mais c'est quelque chose à vérifier.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  6. #6
    Invité
    Invité(e)
    Organigramme (algorigramme)
    Visuellement, ça donne ça :
    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
                         .---------------------.
                         |        n = ?        |
                  D_PROG |        f = 1        |
                         |        n :: 1       |
                  n<= 1  .----------+----------.  n>1
               .-------------------<?>-------------------.
               |                              .----------+----------.
               |                     D_ENTIER |        i = 2        |
               |                              .----------+----------.
               |                                         |<------------------.  
               |                              .----------+----------.        |
    .----------+----------.                   |        f = f * i    |        |  
    |       MESSAGE       |          T_ENTIER |        i = i + 1    |        |  
    .----------+----------.                   |        i :: n       |        |
               |                              .----------+----------.  i<=n  |  
               |                                        <?>------------------.
               |                              .----------+----------.
               |                     F_ENTIER | « Factorielle = » f |
               |                              .----------+----------.
               .--------------------+--------------------.
                         .----------+----------.
                  F_PROG |          Ø          |
                         .---------------------.

  7. #7
    Membre éclairé
    Presque
    Bonjour,

    Ok pour n < 1 et n > 1 mais il reste n == 1.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  8. #8
    Invité
    Invité(e)
    C'est corrigé !
    Citation Envoyé par Guesset Voir le message
    Ok pour n < 1 et n > 1 mais il reste n == 1
    C'était pour voir si quelqu'un suivait…

    En fait, je vieillis, mes réflexes s'émoussent et j'ai eu la flemme de faire une simulation ! J'ai corrigé.

    Un organigramme, c'est terrible, on voit tout.

    Merci !