Calculer le PGCD et le PPCM d'une série de nombre

Calculer le PGCD et le PPCM d'une série de nombre

By ronan, 6 septembre, 2013

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
 
Pour le télécharger, cliquer ici ou via mon GitLab.
Ou alors en ligne de commande :
$ wget -O pgcd.sh.tar http://www.isbeta.fr/83640