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

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

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

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

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

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

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

Код:
    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 в 22:39.
Foksen вне форума   Ответить с цитированием
Старый 05.10.2019, 21:54   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,034
По умолчанию

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

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

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

Нажмите на изображение для увеличения
Название: Desktop Screenshot 2019.10.05 - 21.03.51.97.jpg
Просмотров: 34
Размер:	76.4 Кб
ID:	97869
Foksen вне форума   Ответить с цитированием
Старый 05.10.2019, 22:17   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,034
По умолчанию

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

Переделал немножечко код, сейчас работает. (Ищем нод у двух чисел - 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, 22:02   #7
Foksen
 
Регистрация: 05.10.2019
Сообщений: 7
По умолчанию

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


16:04.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.