Step 9 (S-13624)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/4771/step/9

Напишите скрипт на bash, который будет искать наибольший общий делитель (НОД, greatest common divisor, GCD) двух чисел. При запуске ваш скрипт не должен ничего писать на экран, а просто ждет ввода двух натуральных чисел через пробел (для этого можно использовать read и указать ему две переменные -- см. пример в видеофрагменте). После ввода чисел скрипт считает их НОД и выводит на экран сообщение "GCD is <посчитанное значение>", например, для чисел 15 и 25 это будет "GCD is 5". После этого скрипт опять входит в режим ожидания двух натуральных чисел. Если в какой-то момент работы пользователь ввел вместо этого пустую строку, то нужно написать на экран "bye" и закончить свою работу. 

Вычисление НОД несложно реализовать с помощью алгоритма Евклида. Вам нужно написать функцию gcd, которая принимает на вход два аргумента (назовем их M и N). Если аргументы равны, то мы нашли НОД -- он равен M (или N), нужно выводить соответствующее сообщение на экран (см. выше). Иначе нужно сравнить аргументы между собой. Если M больше N, то запускаем ту же функцию gcd, но в качестве первого аргумента передаем ('M-N), а в качестве второго N. Если же наоборот, M меньше N, то запускаем функцию gcd с первым аргументом M, а вторым (N-M)'.


Пример корректной работы скрипта:

./script.sh10 15GCD is 57 3 GCD is 1bye


'Примечание:в вызове функции из себя самой нет ничего страшного или неправильного, т.ч. смело вызывайте gcd прямо внутри gcd!'

Примечание 2: для завершения работы функции в произвольном месте, можно использовать инструкцию return (все инструкции функции после return выполняться не будут). В отличии от exit эта команда завершит только функцию, а не выполнение всего скрипта целиком. Однако в данной задаче можно обойтись и без использования return!

Подсказка: в случае проблем с решением задачи, обратите внимание на наши рекомендации по написанию скриптов.