Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Скрипты на Баше / 7 сообщений из 7, страница 1 из 1
09.12.2008, 21:29:14
    #35703981
Роман2345
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипты на Баше
Ребят помогите со скриптом который позволяет найти наибольший общий делитель двух чисел набранных с клавиатуры. Что то у меня не выходит...
...
Рейтинг: 0 / 0
09.12.2008, 23:21:19
    #35704134
LK4D4
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипты на Баше
Роман2345Ребят помогите со скриптом который позволяет найти наибольший общий делитель двух чисел набранных с клавиатуры. Что то у меня не выходит...
Поищите в гугл или википедии алгоритм Евклида, он очень прост для реализации.
...
Рейтинг: 0 / 0
09.12.2008, 23:46:02
    #35704164
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипты на Баше
Роман2345 пишет:

> Ребят помогите со скриптом который позволяет найти наибольший общий
> делитель двух чисел набранных с клавиатуры. Что то у меня не выходит...

Зачем это на шеле делать ? Ты бы ещё циклы в графах на шеле стал бы искать.
напиши нормальную программу, из шелла вызови.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
09.12.2008, 23:54:23
    #35704174
Роман2345
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипты на Баше
MasterZiv,

Да в универе препод на зачёте на этом вопросе завалил ((((
Ему нада именно баш скриптом это сделать...а я в баше не так силён...

Вот нашёл алгоритм этот, только что с ним делать и как юзать в баше фиг знает....

http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%95%D0%B2%D0%BA%D0%BB%D0%B8%D0%B4%D0%B0
...
Рейтинг: 0 / 0
10.12.2008, 03:52:55
    #35704267
LK4D4
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипты на Баше
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
int evklid(int a, int b){
    while(a && b){
        if(a>b) a%=b;
        else b%=a;
    }
    return a+b;
}
Вот так это выглядит на C, аналогичные конструкции есть в баш(ну насчет % не уверен), никаких проблем перевод не вызовет. Наберите в гугле синтаксис bash, сразу увидите и while, и if, и сравнения.
...
Рейтинг: 0 / 0
10.12.2008, 04:00:53
    #35704269
LK4D4
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипты на Баше
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
#!/bin/bash
# gcd.sh: поиск наибольшего общего делителя
#         по алгоритму Эвклида

#  Под "наибольшим общим делителем" (нод) двух целых чисел
#+ понимается наибольшее целое число, которое делит оба делимых без остатка.

#  Алгоритм Эвклида выполняет последовательное деление.
#  В каждом цикле,
#+ делимое  <---  делитель
#+ делитель <---  остаток
#+ до тех пор, пока остаток не станет равным нулю (остаток =  0 ).
#+ The gcd = dividend, on the final pass.
#
#  Замечательное описание алгоритма Эвклида можно найти
#  на сайте Jim Loy, http://www.jimloy.com/number/euclids.htm.


# ------------------------------------------------------
# Проверка входных параметров
ARGS= 2 
E_BADARGS= 65 

if [ $# -ne "$ARGS" ]
then
  echo "Порядок использования: `basename $0` первое-число второе-число"
  exit $E_BADARGS
fi
# ------------------------------------------------------


gcd ()
{

                                 #  Начальное присваивание.
  dividend=$ 1                     #  В сущности, не имеет значения
  divisor=$ 2                      #+ какой из них больше.
                                 #  Почему?

  remainder= 1                     #  Если переменные неинициализировать,
                                 #+ то работа сценария будет прервана по ошибке
                                 #+ в первом же цикле.

  until [ "$remainder" -eq  0  ]
  do
    let "remainder = $dividend % $divisor"
    dividend=$divisor            # Повторить цикл с новыми исходными данными
    divisor=$remainder
  done                           # алгоритм Эвклида

}                                # последнее $dividend и есть нод.


gcd $ 1  $ 2 

echo; echo "НОД чисел $1 и $2 = $dividend"; echo


# Упражнение :
# --------
#  Вставьте дополнительную проверку входных аргументов,
#+ и предусмотрите завершение работы сценария с сообщением об ошибке, если
#+ входные аргументы не являются целыми числами.

exit  0 
Взято отсюда http://mklug.linux.kiev.ua/pub/docs/mirrors/gazette.linux.ru.net/rus/articles/abs-guide/c2763.html
...
Рейтинг: 0 / 0
10.12.2008, 09:58:42
    #35704501
Роман2345
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипты на Баше
LK4D4,

Спасибо ! Нужно проверить =)
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Скрипты на Баше / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]