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

Shell et commandes GNU Discussion :

Script pour créer une factorielle et la calculer


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2019
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 51
    Points : 16
    Points
    16
    Par défaut Script pour créer une factorielle et la calculer
    bonsoir à tous!!
    je suis tombé sur pdf qui demande un nombre de départ, et qui calcule sa factorielle.
    NB : la factorielle de 8, notée 8 !, vaut 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8

    mais je n'y arrive pas
    voici mon code :

    Code Shell : 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
     
    read -p "Entrez un nombre :" Nb
     
    i=0
    f=1
     
    for (( i=2; i<=Nb; i++ )); do
     
            $f=$f*$i
     
    done
     
    echo "la factorielle est : $f" 
     
     
    ~

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Citation Envoyé par FrancisTita Voir le message
    je n'y arrive pas
    Quel est ton problème ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2019
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 51
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Quel est ton problème ?

    je n'arrive pas à créer un script qui calcul une factorielle

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    read -p "Entrez un nombre :" Nb
    for (( f=1 ; --Nb ; f=f*(Nb+1) )) ; do : ; done
    echo "la factorielle est : $f"
    Bon courage
    Cordialement.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2019
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 51
    Points : 16
    Points
    16
    Par défaut
    votre script me donne comme résultat :

    marshall@marshall:~> ./scrip.sh
    entrez un nombre :5
    le factorielle est : 1
    le factorielle est : 5
    le factorielle est : 20
    le factorielle est : 60
    marshall@marshall:~>

  6. #6
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2019
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 51
    Points : 16
    Points
    16
    Par défaut
    à la place de f=1 j'ai ecrit f=2 la réponse finale est la bonne mais je ne comprends toujours pas comment le calcul a été fait
    voici le script:

    Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #!/bin/bash  
     
    read -p "entrez un nombre :" Nb
     
    for (( f=2; --Nb; f=f*(Nb+1) )); do
     
            echo "le factorielle est : $f"
    done

    voici le résultat :

    marshall@marshall:~> vim test
    marshall@marshall:~> ./test
    entrez un nombre :5
    le factorielle est : 2
    le factorielle est : 10
    le factorielle est : 40
    le factorielle est : 120


    hors 5! = 1x2X3X4X5 = 2 6 24 120

    pourquoi je n'ai pas pu avoir la même logique avec mon code? puis je avoir de l'aide svp

  7. #7
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Citation Envoyé par FrancisTita Voir le message
    votre script me donne comme resultat :

    marshall@marshall:~> ./scrip.sh
    entrez un nombre :5
    le factorielle est : 1
    le factorielle est : 5
    le factorielle est : 20
    le factorielle est : 60
    marshall@marshall:~>
    Tu n'as pas compris le script, avec f=1 cela fonctionne, on a la bonne valeur, mais juste après être sorti de la boucle.
    Cordialement.

  8. #8
    Membre éprouvé Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 346
    Points : 977
    Points
    977
    Par défaut
    En récursif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ f() { (($1>0)) && echo $(( $1*$(f $(($1-1))) )) || echo 1; }
    $ f 5
    120
    $

  9. #9
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2019
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 51
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    read -p "Entrez un nombre :" Nb
    for (( f=1 ; --Nb ; f=f*(Nb+1) )) ; do : ; done
    echo "la factorielle est : $f"
    Bon courage
    pourquoi lorsque je remets le echo dans la boucle j'ai ce resultat :

    marshall@marshall:~> ./test
    Entrez un nombre :5
    la factorielle est : 1
    la factorielle est : 5
    la factorielle est : 20
    la factorielle est : 60
    marshall@marshall:~>


    et aussi le : juste après le do il sert à quoi parce que lorsque j'essaye de l'enlever j'ai une erreur

  10. #10
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2019
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 51
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Tu n'as pas compris le script, avec f=1 cela fonctionne, on a la bonne valeur, mais juste après être sorti de la boucle.

    ouais j'ai remarqué merci pour votre aide mais il n'y a pas moyen d'obtenir le bon resultat étape par étape les meme resultat que si le calcul était fait à la main

  11. #11
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Le : ne fait rien mais il est indispensable ici parce qu'il faut au moins une instruction entre do et done
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2019
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 51
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Le : ne fait rien mais il est indispensable ici parce qu'il faut au moins une instruction entre do et done
    Anh okay

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/01/2015, 13h56
  2. Un Script pour créer une connexion
    Par Deallyra dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/11/2007, 08h19
  3. Réponses: 22
    Dernier message: 03/08/2007, 15h57
  4. Script pour créer une commande de suppression de fichiers
    Par romain.1105 dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 10/12/2006, 02h28
  5. Réponses: 3
    Dernier message: 17/08/2006, 11h30

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