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

Algorithmes et structures de données Discussion :

Vérification d'une factorielle


Sujet :

Algorithmes et structures de données

  1. #1
    Membre très actif
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 164
    Par défaut Vérification d'une factorielle
    Bonjour, j'essaie de faire un algo pour calculer une factorielle avec une boucle pour mais je ne sais pas si c'est bon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Entier fact,i,n;
    Début
    écrire "Saisir n";
    lire n;
    Si (n=0) alors
    fact <-- 1;
    fin si
    Pour i allant de 2 à n faire
    fact<-- fact * i ;
    fin pour
    écrire fact;
    fin

  2. #2
    Membre chevronné
    Homme Profil pro
    web a11y
    Inscrit en
    Avril 2014
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : web a11y
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2014
    Messages : 191
    Par défaut
    Tu devrais utiliser un programme comme algobox, cela t'aidera à vérifier ce qui se passe.

    Tu utilise un "si … alors … finsi". Ok. Mais alors, ce qui suit sera toujours effectué. Tu n'aurais pas oublié le "sinon" ?

    Enfin, pour la boucle, tu te sers de "fact", mais il n'a jamais été initialisé avant. Tu n'as donc aucune idée de sa valeur, et surtout pas à supposer qu'il est initialisé à une valeur qui t'arrange.

    Pour terminer, est-ce que tu supposes que l'utilisateur ne rentre pas d'âneries ? À ce niveau, je suppose que oui. Donc SI on suppose que l'utilisateur rentrera un entier >= à 0, tu peux simplifier ton code : initialiser fact à 1 par défaut, et faire juste ta boucle.

    [edit] @Flodelarab : oups, bien vu !

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour

    Donc déjà, Stellar7 a dit l'essentiel.
    Après, il y a une faute d'algorithme car tu traites le cas si n=0, et le cas si n égale 2 ou plus. Mais si n= 1, que se passe-t-il ? Réponse: rien. Ta boucle se déclenche trop tard.

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 53
    Par défaut
    Moi ca ne me choque pas que fact ne soit pas initialisé, c'est un algo pas du code, j'imagine que tu initialiseras en passant au codage.

    Et ce n'est que mon avis personel mais je prefere faire les fontion type facto en recursif

    fonction facto(var n)
    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
    Debut facto
    Si (n <= 1)
    Renvoi 1;
    sinon
    Renvoi n * facto(n - 1)
    fin si
    fin facto
     
    Entier fact,i,n;
    Début
    écrire "Saisir n";
    lire n;
    fact = facto(n)
    fin si
    écrire fact;
    fin

  5. #5
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut
    Citation Envoyé par nibors Voir le message
    Moi ca ne me choque pas que fact ne soit pas initialisé, c'est un algo pas du code, j'imagine que tu initialiseras en passant au codage.
    C'est-à-dire que, sans initialisation, impossible de prouver l'algorithme (c'est probablement une étape juste après dans le cours). Et trouver la valeur à prendre pour initialiser peut nécessiter un peu de réflexion (combien n'ont pas déjà essayé zéro pour une factorielle et remarquer que ça ne fonctionne jamais ?).

    Citation Envoyé par nibors Voir le message
    Et ce n'est que mon avis personel mais je prefere faire les fontion type facto en recursif
    Plus pour être complet : ton écriture récursive a des problèmes d'efficacité, tu vas vite exploser la pile pour de grands nombres ; il vaut mieux l'écrire de manière récursive terminale.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  6. #6
    Membre très actif
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 164
    Par défaut
    Merci pour vos réponses , il est que faire une fonction est plus judicieux mais c'est uniquement sans fonction , j'avais juste oublié d'initialiser facto et de mettre un sinon.

    Merci pour votre aide.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/08/2006, 16h51
  2. Réponses: 22
    Dernier message: 18/07/2006, 15h05
  3. [Javascript] Vérification d'une date
    Par slyv dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/11/2005, 08h36
  4. Vérification d'une date
    Par MonsieurPaul dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 12/08/2005, 16h39
  5. Vérification d'une requête ...
    Par Kokito dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/06/2004, 13h59

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