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
 
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

 

Ajouter un commentaire

Filtered HTML

  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
CAPTCHA
Cette question permet de s'assurer que vous êtes un utilisateur humain et non un logiciel automatisé de pollupostage.
CAPTCHA visuel
Entrez les caractères (sans espace) affichés dans l'image.