Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 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;
Не понимаю почему он не работает. Помогите, плез.
My name's Pitt, and your ass ain't talking your way out of this shit

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

Код:
    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", но это не помогло
My name's Pitt, and your ass ain't talking your way out of this shit
Foksen вне форума Ответить с цитированием
Старый 05.10.2019, 21:04   #4
Foksen
Пользователь
 
Регистрация: 05.10.2019
Сообщений: 10
По умолчанию

Desktop Screenshot 2019.10.05 - 21.03.51.97.jpg
My name's Pitt, and your ass ain't talking your way out of this shit
Foksen вне форума Ответить с цитированием
Старый 05.10.2019, 21:17   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Вы пропустили первую часть моего предложения. Берем 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;
        }
    }
My name's Pitt, and your ass ain't talking your way out of this shit
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;
        }
    }
My name's Pitt, and your ass ain't talking your way out of this shit
Foksen вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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