Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 05.10.2019, 20:45   #1
Foksen
Пользователь
 
Регистрация: 05.10.2019
Сообщений: 10
По умолчанию Проблемы с калькулятором НОД

Привет, славяне.

Делаю калькулятор дробей, застрял на штучке, которая будет считать НОД. Пока написал такой код:

Код:
    int x, y, x1, y1, nod;   
    cin >> x;
    cin >> y;

    if (x>=0) x1=x;   // Это делаем, чтобы найти модуль числа. НОД будем вычислять у модулей.
    if (x<0) x1=-x;
    if (y>=0) y1=y;
    if (y<0) y1=-y;

    cout << x1 << "  " << y1 << "\n\n";    // Это мы проверяем, правильно ли прошла предыдущая операция

    if (x1<y1) nod=x1;
    if (x1>=y1) nod=y1;

    while (x1%nod!=0 && y1%nod!=0)
    {
        nod--;
    }

// Находим, модуль какого числа меньше, потом делаем НОД равным этому числу. Дальше декрементим, пока оба числа не будут делится нацело. Есть скорее всего какие-нибудь более рациональные варианты нахождения НОДа, но мне как-то похуй

    if (x>=0) x=x1/nod;
    if (x<0) x=-x1/nod;
    if (y>=0) y=y1/nod;
    if (y<0) y=-y1/nod;

    cout << x << "   " << y << "          nod" << nod;
Не понимаю почему он не работает. Помогите, плез.

Последний раз редактировалось Аватар; 23.10.2019 в 21:39.
Foksen вне форума Ответить с цитированием
Старый 05.10.2019, 20:54   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,103
По умолчанию

Код:
    while (x1%nod!=0 && y1%nod!=0)
    {
        nod--;
    }
Условие неправильное, нет проверки на уход nod за 0.
p51x вне форума Ответить с цитированием
Старый 05.10.2019, 21:00   #3
Foksen
Пользователь
 
Регистрация: 05.10.2019
Сообщений: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Код:
    while (x1%nod!=0 && y1%nod!=0)
    {
        nod--;
    }
Условие неправильное, нет проверки на уход nod за 0.
По логике, когда nod становится равным одному, то цикл останавливается... Ну типо, при делении любого целого числа на 1, остаток будет равным 0.

Я попробовал в условие цикла while добавить "&& nod>0", но это не помогло
Foksen вне форума Ответить с цитированием
Старый 05.10.2019, 21:04   #4
Foksen
Пользователь
 
Регистрация: 05.10.2019
Сообщений: 10
По умолчанию

Desktop Screenshot 2019.10.05 - 21.03.51.97.jpg
Foksen вне форума Ответить с цитированием
Старый 05.10.2019, 21:17   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,103
По умолчанию

Вы пропустили первую часть моего предложения. Берем 3%2 != 0 && 2%2 != 0 -> false цикл не выполняется.
p51x вне форума Ответить с цитированием
Старый 23.10.2019, 21:02   #6
Foksen
Пользователь
 
Регистрация: 05.10.2019
Сообщений: 10
По умолчанию

Переделал немножечко код, сейчас работает. (Ищем нод у двух чисел - a и b. Использую функцию abs (библиотека cstdlib), чтобы работало и с отрицательными числами)

Код:
    for (int z1=abs(a); z1>1; z1--)
    {
        if (a%z1==0 && b%z1==0)
        {
            a/=z1;
            b/=z1;
        }
    }
Foksen вне форума Ответить с цитированием
Старый 23.10.2019, 21:02   #7
Foksen
Пользователь
 
Регистрация: 05.10.2019
Сообщений: 10
По умолчанию

Переделал немножечко код, сейчас работает. (Ищем нод у двух чисел - a и b. Использую функцию abs (библиотека cstdlib), чтобы работало и с отрицательными числами)

Код:
    for (int z1=abs(a); z1>1; z1--)
    {
        if (a%z1==0 && b%z1==0)
        {
            a/=z1;
            b/=z1;
        }
    }
Foksen вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка с калькулятором 8 с/с Strannik_kz Общие вопросы C/C++ 0 28.04.2011 00:54
проблема с калькулятором neprogrammist Общие вопросы Delphi 7 21.06.2010 18:17
Проблема з калькулятором carbon383 Помощь студентам 22 02.11.2008 11:49
Помогите с калькулятором. Sanch Помощь студентам 1 24.09.2008 05:42
Проблемы с калькулятором MAKEDON Помощь студентам 18 02.08.2008 13:30


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS