Blame view

pgcd.sh 1.78 KB
fc7b7ddb6   root   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