Method 1:
#!/bin/bash
#*******************************************************************************************
# gcd.sh: greatest common divisor uses Eclidean algorithm
# Usage : gcd.sh number1 number2
# The algorithm used to calculate the GCD between two integers is known as the Euclidean
# algorithm(Recursive method).
#*******************************************************************************************
#----------------------------------------------------------------------
# Argument check
ARGS=2
BADARGS=65
if [ $# -ne "$ARGS" ]
then
echo ; echo "Invalid Arguments"
echo "Usage: $0 first-number second-number" ; echo
exit $BADARGS
fi
# Check supplied arguments are integers are not
isnumber()
{
if [ $1 -eq $1 2> /dev/null ]
then
:
# : is a null command.This is the shell equivalent of a "NOP"(do nothing)
else
echo -e "\nYou supplied one bad argument \"$1\" is not a number"
echo -e "Usage: $0 first-number second-number\n"
exit $BADARGS
fi
}
isnumber $1
isnumber $2
# ---------------------------------------------------------------------
function Euclidean()
{
if [ $2 -eq 0 ]
then
return $1
else
Euclidean $2 $(($1%$2))
# calling function recursively
fi
}
Euclidean $1 $2
echo "gcd of $1 and $2 is $?"
# $? returns the exit status of script. This is one method to capture return value of a function
exit 0
Method 2:
#!/bin/bash
# gcd2.sh
# Usage: gcd2.sh number1 number2
# For argument check see method 1
gcd ()
{
dividend=$1
divisor=$2
# Arbitrary assignment.
#! It doesn't matter which of the two is larger.
remainder=1
# If uninitialized variable used in loop,it results in an error message
# on the first pass through loop.
if [ $divisor -eq 0 ]
then
echo "GCD of $dividend and $divisor = $dividend"
exit 0
fi
until [ "$remainder" -eq 0 ]
do
let "remainder = $dividend % $divisor"
# Now repeat with 2 smallest numbers
dividend=$divisor .
divisor=$remainder
done
}
# Last $dividend is the gcd.
gcd $1 $2
echo; echo "GCD of $1 and $2 = $dividend"; echo
exit 0
Method 3:
#!/bin/bash
# gcd3.sh
# Usage: gcd3.sh
# This script doesn't use command line arguments.You should to enter two numbers when asking
echo enter two numbers
read n1 n2
remainder=1
# Preserve numbers for future use
t1=$n1
t2=$n2
if [ $n2 -eq 0 ]
then
echo "GCD of $n1 and $n2 = $n1"
exit 0
fi
while [ $remainder -ne 0 ]
do
remainder=`expr $n1 % $n2`
# or use
#remainder=$((n1%n2))
n1=$n2
n2=$remainder
done
echo "GCD of $t1 , $t2 is $n1"
Thank you
ReplyDeletewow I like the recursive method. It's nice and simple
ReplyDeleteYou are limited to numbers less than 256.
ReplyDeleteYou cannot return numbers greater than 255 from a function.
McAfee Online Activation
ReplyDeletenice post you work is good and your content is also effective to us.it is relevant to the to motive.i appreciate your work
Thank you! This is what I need to find.
ReplyDeletehotmail email login