Calculer le PGCD et le PPCM d'une série de nombre
Voici un script qui permet de calculer le PGCD et le PPCM d'au moins deux nombres.
Il s'utilise de cette manière :
$ ./pgcd.sh 50 68 54 etc etc ...
Voici le contenu du script :
$ nl scripts/pgcd.sh
1 #!/bin/bash
2 # Ce script permet de calculer le PGCD et le PPCM
3 # d'au moins deux nombres passés en argument.
4 #
5 # Il utilise quelques commandes intéressantes.
6 # Elles sont toutes expliquées en détail sur www.quennec.fr
7 # Fonction permettant de tester si les arguments
8 # passés au script sont bien numériques et supérieur à 0
9 function isNumeric() {
10 for arg in $@; do
11 if ! expr "$arg" : '-\{0,1\}[0-9]\{1,\}$' >/dev/null; then
12 echo "ERREUR !!! $arg n'est pas un nombre."
13 exit 1
14 else
15 if expr "$arg" = 0 >/dev/null; then
16 echo "ERREUR !!! Saisir un nombre superieur a 0"
17 exit 1
18 fi
19 fi
20 done
21 }
22 # On initialise la variable PATH
23 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
24 # On test si le nombre d'arguments passés
25 # au script est bien supérieur ou égal à 2
26 if [ $# -lt 2 ]; then
27 echo "Usage: `basename $0` premier_nombre deuxieme-nombre etc etc ..."
28 exit 1
29 fi
30 # On exécute la fonction isNumeric en lui passant en argument
31 # tous les arguments passés au script
32 isNumeric $@
33 # Fonction permettant de calculer le PGCD
34 # Cette fonction, je l'ai trouvé sur le site :
36 function pgcd() {
37 dividende=$1
38 diviseur=$2
39 reste=1
40 until [ "$reste" -eq 0 ]; do
41 let "reste=$dividende%$diviseur"
42 dividende=$diviseur
43 diviseur=$reste
44 done
45 }
46 NBR1=$1
47 PPCM=$1
48 VAR="($1"
49 # On décale les arguments du scripts vers la gauche
50 shift
51 # On calcul le PPCM et le PGDC
52 # de tous les nombres passés au script
53 until [ "$#" -eq 0 ]; do
54 NBR2=$1
55 VAR="$VAR,$1"
56 shift
57 pgcd $PPCM $NBR2
58 let "PPCM=$PPCM*$NBR2/$dividende"
59 pgcd $NBR1 $NBR2
60 NBR1=$dividende
61 done
62 VAR="$VAR)"
63 # On affiche le résultat
64 echo; echo "PGCD $VAR = $dividende"; echo
65 echo "PPCM $VAR = $PPCM"; echo
66 exit 0
Ou alors en ligne de commande :
$ wget -O pgcd.sh.tar http://www.isbeta.fr/83640
Ajouter un commentaire