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

Рациональные числа (M / N, M - целое число, N - натуральное число)

21.10.2018, 17:06. Показов 743. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста переделать структуру на класс в С++ с помощью ООП.
Я совсем не могу разобраться, как это сделать

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
using namespace std;
 
struct Number{
    int N, M;
};
 
Number input(){
    Number num;
    do{
        cout << "Input N:";
        cin>>num.N;
    }while (num.N<=0);
    cout << "Input M:";
    cin>>num.M;
    return num;
};
 
void output(Number num){
    cout << "Number is: " << num.M << " / " << num.N << endl;
}
 
double to_double(Number num){
    return double(num.M)/double(num.N);
}
 
double sum(Number num1, Number num2){
    return to_double(num1)+to_double(num2);
}
 
double diff(Number num1, Number num2){
    return to_double(num1)-to_double(num2);
}
 
double mul(Number num1, Number num2){
    return to_double(num1)*to_double(num2);
}
 
int NOD(Number num1){
    int v1 = num1.M;
    int v2 = num1.N;
    while (v2)
    {
        int temp=v2;
        v2=v1%v2;
        v1=temp;
    }
    return v1;
}
 
Number not_reduce(Number num){
    int temp = NOD(num);
    while(NOD(num)>1){
        temp = NOD(num);
        num.M/=temp;
        num.N/=temp;
    }
    return num;
}
 
 
int main(){
    Number num=input();
    output(num);
    Number num1 = input();
    output(num1);
    cout << "double value of num1: " << to_double(num)<<endl;
    cout << "double value of num2: " << to_double(num1)<<endl;
    cout << "num1 + num2: " << sum(num,num1)<<endl;
    cout << "num1 - num2: " << diff(num,num1)<<endl;
    cout << "num1 * num2 " << mul(num,num1)<<endl;
    cout << "Reduced: ";
    output(not_reduce(num));
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.10.2018, 17:06
Ответы с готовыми решениями:

Дано натуральное число а и целое положительное число d. Вычислить частное q и остаток r при делении а на d
1 Дано натуральное число а и целое положительное число d. Вычислить частное q и остаток r при...

Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное число», «нулевое число», «положительное нечетное число» и т. д.
Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное число», «нулевое число»,...

Ввести произвольное целое положительное число. Определить число с обратным порядком цифр заданного числа
Я первокурсник, я мало времени уделил обучению(полный дурак, признаю.) но на завтра нужно сдать...

Дано вещественное число A и целое число N (> 0). Используя один цикл, вывести все целые степени числа A
Дано вещественное число A и целое число N (&gt; 0). Используя один цикл, вывести все целые степени...

2
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
21.10.2018, 18:07 2
что-то такое:
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
 
using namespace std;
 
class Number {
private:
    size_t N;
    int M;
 
    int NOD(Number num) const {
        int v1 = num.M;
        int v2 = num.N;
        while (v2) {
            int temp = v2;
            v2 = v1 % v2;
            v1 = temp;
        }
        return v1;
    }
public:
    Number() : N(0), M(0) {}
    Number(const Number& num) {
        N = num.N;
        M = num.M;
    }
    Number& operator=(Number &num) {
        if (this == &num) return *this;
        N = num.N;
        M = num.M;
        return *this;
    }
 
    double to_double() const { return double(M) / double(N); }
    double operator+(Number &num) const { return this->to_double() + num.to_double(); }
    double operator-(Number &num) const { return this->to_double() - num.to_double(); }
    double operator* (Number &num) const { return this->to_double() * num.to_double(); }
    Number not_reduce() const {
        Number num(*this);
        int temp = NOD(num);
        while (NOD(num) > 1) {
            temp = NOD(num);
            num.M /= temp;
            num.N /= temp;
        }
        return num;
    }
    friend istream& operator>>(istream &stream, Number &num);
    friend ostream& operator<<(ostream &stream, Number num);
};
 
istream& operator>>(istream &stream, Number &num) {
    cout << "Input M: ";
    stream >> num.M;
    cout << "Input N: ";
    stream >> num.N;
    return stream;
}
 
ostream& operator<<(ostream &stream, Number num) {
    stream << "Number is: " << num.M << "/" << num.N << endl;
    return stream;
}
 
int main() {
    Number num, num1;
    cin >> num;
    cout << num;
    cin >> num1;
    cout << num1;
 
    cout << "double value of num1: " << num.to_double() << endl;
    cout << "double value of num2: " << num1.to_double() << endl;
    cout << "num1 + num2: " << num + num1 << endl;
    cout << "num1 - num2: " << num - num1 << endl;
    cout << "num1 * num2: " << num * num1 << endl;
    cout << "Reduced num: " << num.not_reduce();
    cout << "Reduced num1: " << num1.not_reduce();
 
    system("pause");
    return 0;
}
Добавлено через 11 минут
В переопределении оператора ввода лучше сделать проверку на ввод нуля:
C++
1
2
3
4
5
6
7
8
9
10
11
istream& operator>>(istream &stream, Number &num) {
    cout << "Input M: ";
    stream >> num.M;
    int temp; 
    do {
        cout << "Input N: ";
        stream >> temp;
    } while(temp == 0);
    num.N = temp;
    return stream;
}
1
0 / 0 / 0
Регистрация: 18.06.2018
Сообщений: 6
22.10.2018, 19:47  [ТС] 3
Спасибо большое, вы мне очень помогли
0
22.10.2018, 19:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2018, 19:47
Помогаю со студенческими работами здесь

Дано натуральное число N. Получить новое число М, которое образуется из числа N
Дано натуральное число N. Получить новое число М, которое образуется из числа N путем замены...

Дано натуральное число N. Найти наименьшее число М (N< M< 2N), которое делится на сумму цифр числа N (без оста
Дано натуральное число N. Найти наименьшее число М (N&lt; M&lt; 2N), которое делится на сумму цифр числа...

Составить функцию, которая, получив целое число определяет, уменьшается ли оно в целое число раз
задание такое Составить функцию, которая, получив целое число определяет, уменьшается ли оно в...

Написать объявление функции, возвращающую целое число и принимающую указатель на целое число
объявите функцию f2, возвращающую результат целого типа и передающую указатель на переменную а...


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

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

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