Blame view
pgcd.sh
1.78 KB
fc7b7ddb6 ajout |
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
#!/bin/bash # Ce script permet de calculer le PGCD et le PPCM # d'au moins deux nombres passés en argument. # # Il utilise quelques commandes intéressantes. # Elles sont toutes expliquées en détail sur www.quennec.fr # Fonction permettant de tester si les arguments # passés au script sont bien numériques et supérieur à 0 function isNumeric() { for arg in $@; do if ! expr "$arg" : '-\{0,1\}[0-9]\{1,\}$' >/dev/null; then echo "ERREUR !!! $arg n'est pas un nombre." exit 1 else if expr "$arg" = 0 >/dev/null; then echo "ERREUR !!! Saisir un nombre superieur a 0" exit 1 fi fi done } # On initialise la variable PATH PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" # On test si le nombre d'arguments passés # au script est bien supérieur ou égal à 2 if [ $# -lt 2 ]; then echo "Usage: `basename $0` premier_nombre deuxieme-nombre etc etc ..." exit 1 fi # On exécute la fonction isNumeric en lui passant en argument # tous les arguments passés au script isNumeric $@ # Fonction permettant de calculer le PGCD # Cette fonction, je l'ai trouvé sur le site : # http://pierrellensa.free.fr/dev/bash/www.bsdbooks.net/shells/scripting/fr/ops.html function pgcd() { dividende=$1 diviseur=$2 reste=1 until [ "$reste" -eq 0 ]; do let "reste=$dividende%$diviseur" dividende=$diviseur diviseur=$reste done } NBR1=$1 PPCM=$1 VAR="($1" # On décale les arguments du scripts vers la gauche shift # On calcul le PPCM et le PGDC # de tous les nombres passés au script until [ "$#" -eq 0 ]; do NBR2=$1 VAR="$VAR,$1" shift pgcd $PPCM $NBR2 let "PPCM=$PPCM*$NBR2/$dividende" pgcd $NBR1 $NBR2 NBR1=$dividende done VAR="$VAR)" # On affiche le résultat echo; echo "PGCD $VAR = $dividende"; echo echo "PPCM $VAR = $PPCM"; echo exit 0 |