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