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 de calcul du factoriel recursif :aidez moi a trouver l'erreur


Sujet :

Linux

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Points : 13
    Points
    13
    Par défaut script de calcul du factoriel recursif :aidez moi a trouver l'erreur
    #!/bin/sh
    if
    test $# -ne 1
    then
    echo erreur
    exit
    fi
    if test $1 -eq 0
    then
    echo 1
    else
    n=`expr $1 - 1`
    echo `expr $1 \* $($0 $n)`
    fi

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    Citation Envoyé par schizophrenia Voir le message
    #!/bin/sh
    if
    test $# -ne 1
    then
    echo erreur
    exit
    fi
    if test $1 -eq 0
    then
    echo 1
    else
    n=`expr $1 - 1`
    echo `expr $1 \* $($0 $n)`
    fi

    aucune erreur le script est correcte

    => fact.sh 4
    24
    => fact.sh 5
    120
    => fact.sh 6
    720
    ...

    edit : je suppose qu'il ne vient pas de toi vu la question
    sinon quel est ton erreur (a part oublier de mettre un paramètre en entrée je vois pas)

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Ashin Voir le message
    aucune erreur le script est correcte

    => fact.sh 4
    24
    => fact.sh 5
    120
    => fact.sh 6
    720
    ...

    edit : je suppose qu'il ne vient pas de toi vu la question
    sinon quel est ton erreur (a part oublier de mettre un paramètre en entrée je vois pas)
    l'erreur est line 12 rec_fact :commande n'existe pas (rec_fact c'est le nom du script)
    expr : erreur de syntaxe
    voici l'erreur

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    et en le lançant ainsi :

    sh rec_fact 4

    parce qu il n y a pas d'erreur dans le script

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    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 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par schizophrenia Voir le message
    l'erreur est line 12 rec_fact :commande n'existe pas (rec_fact c'est le nom du script)
    expr : erreur de syntaxe
    voici l'erreur
    Problème de PATH. Tu as probablement dû modifier ton PATH en rajoutant ":." pour que les scripts locaux soient appelables directement par leur nom mais en oubliant de l'exporter.
    Donc quand tu lances ton script en appelant "rec_fact", il génère un processus dans lequel le PATH ne contient pas ":.". Total, quand le processus appelle $0 (à savoir "rec_fact"), le système répond "commande non trouvée".

    Solution 1: appeler ton script en y incluant son chemin => ./rec_fact => il incluera ce chemin dans les appels récursifs

    Solution 2: exporter le PATH => tous les processus fils auront le même PATH

    Et si tu as envie de briller, tu peux montrer ce script qui a l'avantage de calculer la factorielle sans récursivité et 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
    14
    15
    16
    17
    18
    #!/bin/sh
    if test $# -lt 1
    then
        echo erreur
        exit 1
    fi
     
    nb=${nb:-$1}
    res=`expr ${res:-1} \* $nb`
    nb=`expr $nb - 1`
     
    if test $nb -le 1
    then
        test $res -ne 0 && echo $res || echo 1
        exit 0
    fi
     
    source $0

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Problème de PATH. Tu as probablement dû modifier ton PATH en rajoutant ":." pour que les scripts locaux soient appelables directement par leur nom mais en oubliant de l'exporter.
    Donc quand tu lances ton script en appelant "rec_fact", il génère un processus dans lequel le PATH ne contient pas ":.". Total, quand le processus appelle $0 (à savoir "rec_fact"), le système répond "commande non trouvée".

    Solution 1: appeler ton script en y incluant son chemin => ./rec_fact => il incluera ce chemin dans les appels récursifs

    Solution 2: exporter le PATH => tous les processus fils auront le même PATH

    Et si tu as envie de briller, tu peux montrer ce script qui a l'avantage de calculer la factorielle sans récursivité et sans boucle

    le script fonctionne correctement maintenant

    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
    #!/bin/sh
    if test $# -lt 1
    then
        echo erreur
        exit 1
    fi
     
    nb=${nb:-$1}
    res=`expr ${res:-1} \* $nb`
    nb=`expr $nb - 1`
     
    if test $nb -le 1
    then
        test $res -ne 0 && echo $res || echo 1
        exit 0
    fi
     
    source $0

Discussions similaires

  1. [MySQL-5.5] Aidez moi a trouver la bonne requete SQL s'il vous plait
    Par kertimanoff dans le forum Requêtes
    Réponses: 5
    Dernier message: 25/03/2013, 12h27
  2. Aidez moi a trouver l'erreur svp
    Par Layla dans le forum Langage
    Réponses: 2
    Dernier message: 18/06/2010, 10h40
  3. Réponses: 2
    Dernier message: 21/06/2008, 11h01
  4. Aidez moi svp pour une erreur en delphi
    Par jujudrogba dans le forum Framework .NET
    Réponses: 1
    Dernier message: 04/01/2007, 17h22

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