0 / 0 / 0
Регистрация: 29.09.2019
Сообщений: 29
1

Не выходит функция сокращения дроби

21.03.2020, 13:33. Показов 342. Ответов 3

Задание: Создать класс для представления простой дроби. Реализовать конструкторы, функцию сокращения дроби, а также перегрузить операции +, -, *, /, ввода и вывода. Осуществить демонстрацию возможностей класса в функции main ().

Всё уже сделано и работает, кроме сокращения.
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
32
33
34
35
36
37
#include<iostream>
using namespace std;
class Drob
{
    friend istream& operator>>(istream& in,  Drob& d)
    {
        return in >> d.chislitel >> d.znamenatel;
    
    }
    friend ostream& operator<<(ostream& out, const Drob& b) 
    { 
        return out << b.chislitel << "/" << b.znamenatel << endl;
    }
    friend Drob operator+(Drob d1, Drob d2) { return Drob(d1.chislitel * d2.znamenatel + d2.chislitel * d1.znamenatel, d1.znamenatel * d2.znamenatel); }
    friend Drob operator-(Drob d1, Drob d2) { return Drob(d1.chislitel * d2.znamenatel - d2.chislitel * d1.znamenatel, d1.znamenatel * d2.znamenatel); }
    friend Drob operator*(Drob d1, Drob d2) { return Drob(d1.chislitel * d2.chislitel, d1.znamenatel * d2.znamenatel); }
    friend Drob operator/(Drob d1, Drob d2) { return Drob(d1.chislitel * d2.znamenatel, d1.znamenatel * d2.chislitel); }
private:
    int chislitel;
    int znamenatel;
    
public:
    Drob() {}
    Drob(int chislitel, int znamenatel)
    {
        this->znamenatel = znamenatel;
        this->chislitel = chislitel;
    }
    
    
    
};
int main()
{
    Drob d1(2, 4);
    Drob d2(4, 12);
    cout << d1 + d2;
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.03.2020, 13:33
Ответы с готовыми решениями:

Функция сокращения дроби
Нужно создать функцию сокращения дроби и операции +,-,*,/. +,-,*,/ уже есть а вот сокращение...

Функция сокращения рациональной дроби
Напишите процедуру, которая сокращает дробь вида M/N. Числитель и знаменатель дроби передаются как...

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

Процедура сокращения дроби
Помогите, пожалуйста, составить программу. Пусть процедура Socr (a,b,p,q) от целых параметров...

3
Модератор
Эксперт С++
12639 / 10133 / 6102
Регистрация: 18.12.2011
Сообщений: 27,169
21.03.2020, 13:38 2
и где Ваш вариант сокращения?
Что Вы по этой теме нашли на нашем сайте.
Например, видели ли это Класс Дробь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 Rational& simplify()
    {
        int cmnDivisor = gcd(abs(num), denom);
 
        num /= cmnDivisor;
        denom /= cmnDivisor;
 
        return *this;
    }
 
    // Служебная функция:
    // вычисление наибольшего общего делителя
    static int gcd(int a, int b)
    {
        if (a == 0)
            return 1;
 
        while (a != b)
            a > b ? a -= b : b -= a;
        return a;
    }
0
0 / 0 / 0
Регистрация: 29.09.2019
Сообщений: 29
21.03.2020, 13:40  [ТС] 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Drob reduction()
    {
        for (int i = chislitel; i < chislitel; i--)
        {
            if (chislitel % i == 0 && znamenatel % i == 0)
            {
 
 
                
                return Drob(chislitel /= i, znamenatel /= i);
                
 
            }
 
            else
            {
            return Drob(chislitel /= 1, znamenatel /= 1);
            }
        }
    
    }
0
Параллельный Кот
1904 / 826 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
21.03.2020, 13:47 4
Xoluz_1, Вам уже написали 2 правильных варианта, но Вы их игнорируете и плодите темы. В чем смысл?

Реализация НОД легко гуглится.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int gcd (int a, int b) {
    if (b == 0)
        return a;
    else
        return gcd (b, a % b);
}
 
class Drob
{
public:
    Drob reduction() const
    {
        const int nod = gcd(chislitel, znamenatel);
        return Drob(chislitel / nod, znamenatel / nod);
    }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.03.2020, 13:47
Помогаю со студенческими работами здесь

Программа сокращения дроби
пРИ выполнении программы вылетыет с ошибкой.Где ошибка?:-| #include&lt;stdio.h&gt; void main() { int...

Модуль сокращения дроби
Есть ли такой модуль/исходник/алгоритм, который будет сокращать дроби типа: 2/3*3. Я создал...

Цикл сокращения дроби A/B
В общем написал программу, но он выводит те же значения которые ввел, где ошибка? с каждым шагом...

Процедура сокращения дроби
нужно составить функцию сокращения дроби х-верхняя часть дроби у-нижняя часть дроби var...


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

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

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