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

avec Java Discussion :

Algorithme qui calcule le factoriel


Sujet :

avec Java

  1. #1
    Membre régulier Avatar de overmac
    Homme Profil pro
    Inscrit en
    juillet 2004
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2004
    Messages : 130
    Points : 92
    Points
    92
    Par défaut Algorithme qui calcule le factoriel
    Bonjour à tous,

    Voulant apprendre le codage avec Java, j'effectue plusieurs exercices "simples" pour m'initier.
    Dans ce programme, j'essaye de calcul le factoriel.
    Cependant, quelque soit le chiffre inscrit (sauf 0), il me retourne 1..

    J'imagine que l'erreur provient de ma boucle "for" mais je n'arrive pas à voir d'où ça vient.

    avant de coder, j'ai testé mon algorithme sur Algobox, qui fonctionne pourtant bien.

    Pourriez-vous m'aiguiller je vous prie ?

    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
    30
    import java.util.Scanner;
     
    public class Factoriel 
    {
    	public static void main(String[] args) 
    	{
    		int iteration = 1;
    		int factoriel;
    		int saisieClavier;
     
    		System.out.print("Veuillez indiquer le nombre/chiffre à factoriser : ");
     
    		try(Scanner clavier = new Scanner (System.in))
    		{
    			saisieClavier = clavier.nextInt();
    			if(saisieClavier == 0)
    			{
    				System.out.print("Le factoriel de 0 est 1");
    			}
    			else
    			{
    				for(factoriel=1;factoriel == saisieClavier;factoriel++)
    				{
    				iteration *= factoriel;
    				}
    			}
    		}
    		System.out.print("Le factoriel de " + saisieClavier + " est " + iteration);
    	}
    }

  2. #2
    Membre régulier Avatar de overmac
    Homme Profil pro
    Inscrit en
    juillet 2004
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2004
    Messages : 130
    Points : 92
    Points
    92
    Par défaut
    Je pense avoir trouvé le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(factoriel=1;factoriel <= saisieClavier;factoriel++)
    {
    	iteration *= factoriel;
    }
    Mais je ne comprends toujours pas pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    factoriel == saisieClavier
    ne fonctionne pas.

  3. #3
    Membre averti
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    décembre 2008
    Messages
    550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2008
    Messages : 550
    Points : 404
    Points
    404
    Par défaut
    Bonjour,

    Mais je ne comprends toujours pas pourquoi
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    factoriel == saisieClavier

    Il faut que tu saches que les 3 blocs constituant une boucle for ne sont pas exécutés en même temps :
    - Initialisation : juste avant que la boucle ne démarre . C'est comme si les instructions d'initialisation avaient été écrites juste avant la boucle, un peu comme pour une boucle while
    - Condition : avant chaque passage de boucle, exactement comme la condition d'une boucle while
    - Incrémentation : après chaque passage de boucle. Cela veut dire que si tu fais un break dans une boucle for, lors du passage de la boucle l'instruction break ne sera pas comptée.

    Au niveau de ton code, le problème venait de la condition :
    cas 1 : si elle était vérifiée, c'est-à-dire saisieClavier valait 1 le résultat de la factoriel vaudrait 1
    cas 2 : si saisieClavier valait tout autre valeur que 1, la condition n'est pas vérifiée donc fausse et on ne passe pas à l'instruction suivante, c'est-à-dire au calcul à proprement parlé de la factoriel du nombre.

    Effectivement, il faut borner la valeur de la factorielle par rapport à la valeur de saisieClavier.

    P.S : Si ton problème est résolu, peux-tu l'indiquer s'il te plait en cliquant sur Résolu. Merci.

  4. #4
    Membre régulier Avatar de overmac
    Homme Profil pro
    Inscrit en
    juillet 2004
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2004
    Messages : 130
    Points : 92
    Points
    92
    Par défaut
    Merci pour l'explication.

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

Discussions similaires

  1. algorithme qui calcul la matrice de coocurence
    Par takfa2008 dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 13/11/2008, 09h41
  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. [Erreur] algorithme qui calcul une moyenne
    Par quaresma dans le forum Algorithmes et structures de données
    Réponses: 29
    Dernier message: 24/04/2008, 20h58
  4. Algorithme qui calcule la racine de F(x) par la méthode de dichotomie
    Par autoin dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 09/01/2008, 14h28
  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