Commit fc7b7ddb65880cf0846c5ecd2a26882808c277e5

Authored by root
1 parent a25cfce8b6
Exists in master

ajout

Showing 1 changed file with 80 additions and 0 deletions

  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