3 / 3 / 4
Регистрация: 16.11.2013
Сообщений: 102
1

Упрощение дробей

12.09.2015, 17:27. Показов 3236. Ответов 10
Метки нет (Все метки)

Здравствуйте! Сделал реализацию упрощения дробей. Есть две дроби. 7/6 и 3/18, когда && сокращает только первую дробь. В чем ошибка?
C++
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
fract fract::reduce(fract ab)
{
    int tmp = 0;
    if ((prime(ab.numerator) == false) && (prime(ab.denominator) == false)) {
        int nod = NOD(ab.numerator, ab.denominator);
        ab.numerator /= nod;
        ab.denominator /= nod;
        return ab;
    }
    else
    {       
        ab.unit += ab.numerator / ab.denominator;
        while (ab.numerator>ab.denominator) 
        {
            ab.numerator -= ab.denominator;
        }
        return ab;
    }
}
 
bool fract::prime(int a)
{
    for (int i = 2; i<sqrt(a)+1; i++) 
    {
        if (a % i == 0) 
        {
            return false;
        }
    }
    return true;
}

Упрощение дробей


Упрощение дробей
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.09.2015, 17:27
Ответы с готовыми решениями:

Упрощение дробей
int chis,znam; int result1,result2; cout &lt;&lt; &quot;Введите числитель и знаменатель: &quot; &lt;&lt; endl; ...

Упрощение цикла сортировки элементов массивов. Упрощение цикла поиска нужного элемента в массиве
Уверен, что данный код можно написать компактнее чем есть сейчас. /*Опишите, используя...

Упрощение кода
void Polynomials::print(){ // Вывод полинома int i; int k; // признак того, что...

Упрощение и алгоритм
Здрасте есть рекурентное выражение не удаётся упростить для нахождения итератора, (ВСЯ ПРОБЛЕМА -...

10
Эксперт PHP
3102 / 2587 / 1219
Регистрация: 14.05.2014
Сообщений: 7,231
Записей в блоге: 1
12.09.2015, 17:34 2
Цитата Сообщение от Redsnake Посмотреть сообщение
В чем ошибка?
В том что из выше написанного ничего не понятно.
0
3 / 3 / 4
Регистрация: 16.11.2013
Сообщений: 102
12.09.2015, 17:35  [ТС] 3
Что конкретно не понятно?
ab.numerator= числитель
ab.denominator=знаменатель
ab.unit = целая часть дроби
0
Эксперт PHP
3102 / 2587 / 1219
Регистрация: 14.05.2014
Сообщений: 7,231
Записей в блоге: 1
12.09.2015, 17:41 4
Цитата Сообщение от Redsnake Посмотреть сообщение
Что конкретно не понятно?
Например, причем тут простые числа? Достаточно найти наибольший общий делитель и поделить на него.
0
7275 / 6220 / 2833
Регистрация: 14.04.2014
Сообщений: 26,871
12.09.2015, 17:41 5
А зачем вообще ветка по else? Функцию NOD() клинит от простых чисел?
0
2758 / 1912 / 569
Регистрация: 05.06.2014
Сообщений: 5,561
12.09.2015, 17:52 6
3 считается за простое число, алгоритм выходит на ветку else, а там никакого сокращения не происходит.
Алсо, for (int i = 2; i<sqrt(a)+1; i++) for (int i = 3; i<sqrt(a)+1; i+=2)
1
3 / 3 / 4
Регистрация: 16.11.2013
Сообщений: 102
12.09.2015, 20:55  [ТС] 7
Додумался сам

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
fract fract::reduce(fract ab)
{
    while (ab.numerator > ab.denominator)
    {
        ab.numerator -= ab.denominator;
        ab.unit++;
    }
    int nod = NOD(ab.numerator, ab.denominator);
    ab.numerator /= nod;
    ab.denominator /= nod;
    ab.unit += ab.numerator / ab.denominator;
    return ab;
}
0
Эксперт PHP
3102 / 2587 / 1219
Регистрация: 14.05.2014
Сообщений: 7,231
Записей в блоге: 1
12.09.2015, 21:03 8
Redsnake, это у Вас статический метод?
0
3 / 3 / 4
Регистрация: 16.11.2013
Сообщений: 102
12.09.2015, 21:05  [ТС] 9
выдает ошибку, если не статический
0
Эксперт PHP
3102 / 2587 / 1219
Регистрация: 14.05.2014
Сообщений: 7,231
Записей в блоге: 1
12.09.2015, 21:53 10
Лучший ответ Сообщение было отмечено Redsnake как решение

Решение

Цитата Сообщение от Redsnake Посмотреть сообщение
выдает ошибку, если не статический
а то я сижу и думаю, зачем методу передавать параметр того же класса, в членом-которого он (метод) является?
Так не пробовали (не статический)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
fract fract::reduce()
{
    while (numerator > denominator)
    {
        numerator -= denominator;
        unit++;
    }
    int nod = NOD(numerator, denominator);
    numerator /= nod;
    denominator /= nod;
    unit += numerator / denominator;
    return *this;
}
1
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 201
12.09.2015, 23:59 11
Redsnake, если хочется "правильно" то можно скачать gcc старых версий там специальный cpp файл отвечает за сокращению дробей написанных програмистом в исходном коде программы. В более новых версиях gcc это тоже есть (должно быть), но я лично ненашол явных функций для морфологического анализа.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.09.2015, 23:59
Помогаю со студенческими работами здесь

Упрощение кода
Хочу написать многофункциональную консольную программу. Код получится громоздкий и запутанный. C++...

Упрощение кода
Можно ли как нибудь сократить или упростить код? cin&gt;&gt;answer; if ((answer!=&quot;y&quot;) &amp;&amp;...

Упрощение программы
Можно ли как-нибудь упростить эту программу? #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int...

Упрощение ветвления Ш
Делаю проверку для выявления самого большого значения, понимаю что так быть не должно подскажите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru