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

Linux Discussion :

Script shell factoriel


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Par défaut Script shell factoriel
    Bonjour.

    Quelqu'un peut il m'aider a ecrire un script qui calcule la factoriel d'un nombre entre en parametre?

    Merci d'avance.

    Cordialement.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    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
    #!/bin/sh 
     
    fact() { 
            n=$1 
            if [ $n -eq 0 ] 
            then 
                    echo 1 
            else 
                    echo $(( n * `fact $(( n - 1 ))` )) 
            fi 
    } 
     
    echo `fact $1`

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Ashin Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/bin/sh 
     
    fact() { 
            n=$1 
            if [ $n -eq 0 ] 
            then 
                    echo 1 
            else 
                    echo $(( n * `fact $(( n - 1 ))` )) 
            fi 
    } 
     
    echo `fact $1`
    Super de mettre de la récursivité là où on peut s'en passer. Par ailleurs, c'est dommage de ne pas protéger les variables d'une fonction (que se passe-t-il si j'écris avant l'appel de la fonction "n=12" puis que je désire récupérer "n" après ???)

    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
    #!/bin/sh 
     
    fact()
    {
        # Je protège toutes mes variables grace à la création d'un sous-shell
        (
            res=1
            val=$1
     
            while test $val -gt 1
            do
                res=`expr $res \* $val`
                val=`expr $val - 1`
            done
     
            echo $res
        )
    }
     
    echo `fact $1`
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Par défaut
    là il est détruit mais il suffit de le stocker s il souhaite resortir son paramètre.

    la récursivité c est souvent plus simple mais c est vrai que ta solution n était pas si dure que ça

  5. #5
    Membre habitué
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Par défaut REMERCIEMENT
    Merci a tous pour votre promptitude.

    Cordialement.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Ashin Voir le message
    là il est détruit mais il suffit de le stocker s il souhaite ressortir son paramètre.
    Exact. Si tu mets "n=12" avant l'appel, ça signifie que tu veux le garder. Mais comme les fonctions en shell ne créent pas d'environnement à part, le "n" de la fonction correspond au "n" du code principal et il y a écrasement. Pour pallier cet inconvénient, 2 solutions
    1) mettre des parenthèses dans le corps de la fonction comme j'ai écrit
    2) déclarer "n" (ou toute autre variable) comme "local" en écrivant "local n" au début du code

    Citation Envoyé par Ashin Voir le message
    la récursivité c est souvent plus simple
    et plus lourde pour le processeur.

    [edit]D'ailleurs je me suis amusé, pour le fun, à réécrire un code de factorielle absolument sans boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/bin/sh
     
    nb=${nb:-$1}
    res=${res:-1}
     
    if test $nb -gt 1
    then
    	res=`expr $res \* $nb`
    	nb=`expr $nb - 1`
    	source $0
    else
    	echo $res
    fi
    Aucun while, aucun until, aucun for et pourtant ça marche => lancer le script et mettre le nombre en argument
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Script shell
    Par anzar dans le forum Linux
    Réponses: 4
    Dernier message: 03/12/2004, 14h41
  2. [JSP] script shell
    Par goolix dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 06/08/2004, 09h08
  3. Exécution d'un script shell
    Par Manu0086 dans le forum Linux
    Réponses: 8
    Dernier message: 15/06/2004, 16h31
  4. Explication script shell
    Par crasho007 dans le forum Linux
    Réponses: 2
    Dernier message: 14/06/2004, 13h54
  5. Cron + terminal + script shell
    Par nicolas.pissard dans le forum Linux
    Réponses: 3
    Dernier message: 17/03/2004, 09h24

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