Форум программистов, компьютерный форум CyberForum.ru

Организовать производный класс, содержащий функции вычисления деления и умножения дробей - C++

Восстановить пароль Регистрация
 
roker2010
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 8
30.05.2013, 06:37     Организовать производный класс, содержащий функции вычисления деления и умножения дробей #1
Организовать производный класс, содержащий функции вычисления деления и умножения дробей, функцию приведения дроби к несократимому виду.
Очень прошу помогите кто знает! Заранее огромное спасибо!

Добавлено через 3 минуты
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
#include<iostream>
#include<math.h>
#include <stdio.h>
class fraction {
protected: 
           int a, b;
public:
       fraction (int c, int d)
       { a=c;
         b=d;
       }
       fraction()
       { printf(" Vvedite chislitel' and znamenatel' :\n");
         printf("a= "); scanf("%d", &a);
         printf("b= "); scanf("%d", &b);
       }
void print()
       {printf("drob' %d/%d\n", a, b);
       }
int Nod(int a, int b)
{
    while (a && b)
        if (a >= b)
           a %= b;
        else
           b %= a;
    return a | b;
}
void Func()
{ 
   int t = Nod(a, b); 
   
   a /= t; 
   b /= t; 
   std::cout << a << "/ " << b << std::endl;
}
};
int main()
{ 
 fraction e;
 e.print();
 e.Func();
 
 system("pause");         
}
Добавлено через 5 часов 40 минут
плизз!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2013, 06:37     Организовать производный класс, содержащий функции вычисления деления и умножения дробей
Посмотрите здесь:

Есть производный класс и базовый; при чём производный использует только ЧАСТЬ ресурсов базового, правильно ли это? C++
C++ Написать функции вычисления сложения, вычитания, умножения и деления дробей
Организовать класс треугольник определенный по 3-ем сторонам содержащий методы нахождения периметра и площади(По формуле герона) C++
Организовать производный класс, содержащий функции вычисления сложения и вычитания дробей, исходники есть C++
C++ Не работает пример умножения и деления дробей
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
30.05.2013, 11:23     Организовать производный класс, содержащий функции вычисления деления и умножения дробей #2
Цитата Сообщение от roker2010 Посмотреть сообщение
Организовать производный класс, содержащий функции вычисления деления и умножения дробей, функцию приведения дроби к несократимому виду.
А зачем тут производный класс?! Хм. Возможно, чтобы показать вам, что надо делать публичные геттеры и сеттеры.

Не имеет смысла делать наследование.

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
 
class Fraction {
 public:
  Fraction() : numerator(0), denominator(1) {}
  Fraction(int number) : numerator(number), denominator(1) {}
  Fraction(int numerator, int denominator) : numerator(numerator),
    denominator(denominator) {}
  int getNumerator() const { return numerator; }
  int getDenominator() const { return denominator; }
  Fraction reduce() const {
    int gcd = getGcd(numerator, denominator);
    int numerator = getNumerator() / gcd;
    int denominator = getDenominator() / gcd;
    if (denominator < 0) {
      numerator = -numerator;
      denominator = -denominator;
    }
    return Fraction(numerator, denominator);
  }
 
  /*
   * Сравнение дробей
   * возвращает 0, если дроби равны
   * возвращает значение < 0 если левая дробь меньше
   * возвращает значение > 0 если левая дробь больше
   */
  int compare(const Fraction &f) const {
    return getNumerator() * f.getDenominator() -
      getDenominator() * f.getNumerator();
  }
  /*
   * Арифметические действия с дробями
   */
  Fraction add(const Fraction &f) const {
    return Fraction(getNumerator() * f.getDenominator() +
      getDenominator() * f.getNumerator(),
      getDenominator() * f.getDenominator());
  }
  Fraction subtract(const Fraction &f) const {
    return Fraction(getNumerator() * f.getDenominator() -
      getDenominator() * f.getNumerator(),
      getDenominator() * f.getDenominator());
  }
  Fraction multiply(const Fraction &f) const {
    return Fraction(getNumerator() * f.getNumerator(),
      getDenominator() * f.getDenominator());
  }
  Fraction divide(const Fraction &f) const {
    return Fraction(getNumerator() * f.getDenominator(),
      getDenominator() * f.getNumerator());
  }
 private:
  static int getGcd(int a, int b) {
    if (a < 0) a = -a;
    if (b < 0) b = -b;
    while (a && b) {
      if (a >= b) {
        a %= b;
      } else {
        b %= a;
      }
    }
    return a | b;
  }
  int numerator, denominator;
};
 
std::ostream &operator<<(std::ostream &stream, const Fraction &fraction) {
  Fraction f = fraction.reduce();
  return stream << f.getNumerator() << "/" << f.getDenominator();
}
 
// операторы арифметических действий
Fraction operator+(const Fraction &a, const Fraction &b) {
  return a.add(b);
}
Fraction operator-(const Fraction &a, const Fraction &b) {
  return a.subtract(b);
}
Fraction operator*(const Fraction &a, const Fraction &b) {
  return a.multiply(b);
}
Fraction operator/(const Fraction &a, const Fraction &b) {
  return a.divide(b);
}
 
// ну и для полноты картины операторы сравнения
bool operator<(const Fraction &a, const Fraction &b) {
  return a.compare(b) < 0;
}
 
bool operator<=(const Fraction &a, const Fraction &b) {
  return a.compare(b) <= 0;
}
 
bool operator>(const Fraction &a, const Fraction &b) {
  return a.compare(b) > 0;
}
 
bool operator>=(const Fraction &a, const Fraction &b) {
  return a.compare(b) >= 0;
}
 
bool operator==(const Fraction &a, const Fraction &b) {
  return a.compare(b) == 0;
}
 
bool operator!=(const Fraction &a, const Fraction &b) {
  return a.compare(b) != 0;
}
 
int main(int, char**) {
  // можно функциями, но читается плохо
  std::cout << Fraction(1, 4).multiply(Fraction(1).divide(Fraction(2, 3).add(Fraction(5, 6)))) << std::endl;
  
  // операторами удобнее
  std::cout << Fraction(1, 4) * (1 / (Fraction(2, 3) + Fraction(5, 6))) << std::endl;
}
roker2010
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 8
30.05.2013, 11:36  [ТС]     Организовать производный класс, содержащий функции вычисления деления и умножения дробей #3
Так в условие задания

Добавлено через 10 минут
Изменить программу, используя для умножения и деления дробей соответствующие перегруженные операции.
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
 
class Fraction {
 public:
  Fraction() : numerator(0), denominator(1) {}
  Fraction(int number) : numerator(number), denominator(1) {}
  Fraction(int numerator, int denominator) : numerator(numerator),
    denominator(denominator) {}
  int getNumerator() const { return numerator; }
  int getDenominator() const { return denominator; }
  Fraction reduce() const {
    int gcd = getGcd(numerator, denominator);
    int numerator = getNumerator() / gcd;
    int denominator = getDenominator() / gcd;
    if (denominator < 0) {
      numerator = -numerator;
      denominator = -denominator;
    }
    return Fraction(numerator, denominator);
  }
 
  /*
   * Сравнение дробей
   * возвращает 0, если дроби равны
   * возвращает значение < 0 если левая дробь меньше
   * возвращает значение > 0 если левая дробь больше
   */
  int compare(const Fraction &f) const {
    return getNumerator() * f.getDenominator() -
      getDenominator() * f.getNumerator();
  }
  /*
   * Арифметические действия с дробями
   */
  Fraction add(const Fraction &f) const {
    return Fraction(getNumerator() * f.getDenominator() +
      getDenominator() * f.getNumerator(),
      getDenominator() * f.getDenominator());
  }
  Fraction subtract(const Fraction &f) const {
    return Fraction(getNumerator() * f.getDenominator() -
      getDenominator() * f.getNumerator(),
      getDenominator() * f.getDenominator());
  }
  Fraction multiply(const Fraction &f) const {
    return Fraction(getNumerator() * f.getNumerator(),
      getDenominator() * f.getDenominator());
  }
  Fraction divide(const Fraction &f) const {
    return Fraction(getNumerator() * f.getDenominator(),
      getDenominator() * f.getNumerator());
  }
 private:
  static int getGcd(int a, int b) {
    if (a < 0) a = -a;
    if (b < 0) b = -b;
    while (a && b) {
      if (a >= b) {
        a %= b;
      } else {
        b %= a;
      }
    }
    return a | b;
  }
  int numerator, denominator;
};
 
std::ostream &operator<<(std::ostream &stream, const Fraction &fraction) {
  Fraction f = fraction.reduce();
  return stream << f.getNumerator() << "/" << f.getDenominator();
}
 
// операторы арифметических действий
Fraction operator+(const Fraction &a, const Fraction &b) {
  return a.add(b);
}
Fraction operator-(const Fraction &a, const Fraction &b) {
  return a.subtract(b);
}
Fraction operator*(const Fraction &a, const Fraction &b) {
  return a.multiply(b);
}
Fraction operator/(const Fraction &a, const Fraction &b) {
  return a.divide(b);
}
 
// ну и для полноты картины операторы сравнения
bool operator<(const Fraction &a, const Fraction &b) {
  return a.compare(b) < 0;
}
 
bool operator<=(const Fraction &a, const Fraction &b) {
  return a.compare(b) <= 0;
}
 
bool operator>(const Fraction &a, const Fraction &b) {
  return a.compare(b) > 0;
}
 
bool operator>=(const Fraction &a, const Fraction &b) {
  return a.compare(b) >= 0;
}
 
bool operator==(const Fraction &a, const Fraction &b) {
  return a.compare(b) == 0;
}
 
bool operator!=(const Fraction &a, const Fraction &b) {
  return a.compare(b) != 0;
}
 
int main(int, char**) {
  // можно функциями, но читается плохо
  std::cout << Fraction(1, 4).multiply(Fraction(1).divide(Fraction(2, 3).add(Fraction(5, 6)))) << std::endl;
  
  // операторами удобнее
  std::cout << Fraction(1, 4) * (1 / (Fraction(2, 3) + Fraction(5, 6))) << std::endl;
}
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
30.05.2013, 12:02     Организовать производный класс, содержащий функции вычисления деления и умножения дробей #4
Цитата Сообщение от roker2010 Посмотреть сообщение
Изменить программу, используя для умножения и деления дробей соответствующие перегруженные операции.
Эмм... Уже в коде есть.

Преподы у вас, я гляжу, любят троллить незнаек.
roker2010
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 8
30.05.2013, 12:08  [ТС]     Организовать производный класс, содержащий функции вычисления деления и умножения дробей #5
деление и умножение дробей и приведение к несократимому виду
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
 
class Fraction {
 public:
  Fraction() : numerator(0), denominator(1) {}
  Fraction(int number) : numerator(number), denominator(1) {}
  Fraction(int numerator, int denominator) : numerator(numerator),
    denominator(denominator) {}
  int getNumerator() const { return numerator; }
  int getDenominator() const { return denominator; }
  Fraction reduce() const {
    int gcd = getGcd(numerator, denominator);
    int numerator = getNumerator() / gcd;
    int denominator = getDenominator() / gcd;
    if (denominator < 0) {
      numerator = -numerator;
      denominator = -denominator;
    }
    return Fraction(numerator, denominator);
  }
 
  /*
   * Сравнение дробей
   * возвращает 0, если дроби равны
   * возвращает значение < 0 если левая дробь меньше
   * возвращает значение > 0 если левая дробь больше
   */
  int compare(const Fraction &f) const {
    return getNumerator() * f.getDenominator() -
      getDenominator() * f.getNumerator();
  }
  /*
   * Арифметические действия с дробями
   */
  Fraction add(const Fraction &f) const {
    return Fraction(getNumerator() * f.getDenominator() +
      getDenominator() * f.getNumerator(),
      getDenominator() * f.getDenominator());
  }
  Fraction subtract(const Fraction &f) const {
    return Fraction(getNumerator() * f.getDenominator() -
      getDenominator() * f.getNumerator(),
      getDenominator() * f.getDenominator());
  }
  Fraction multiply(const Fraction &f) const {
    return Fraction(getNumerator() * f.getNumerator(),
      getDenominator() * f.getDenominator());
  }
  Fraction divide(const Fraction &f) const {
    return Fraction(getNumerator() * f.getDenominator(),
      getDenominator() * f.getNumerator());
  }
 private:
  static int getGcd(int a, int b) {
    if (a < 0) a = -a;
    if (b < 0) b = -b;
    while (a && b) {
      if (a >= b) {
        a %= b;
      } else {
        b %= a;
      }
    }
    return a | b;
  }
  int numerator, denominator;
};
 
std::ostream &operator<<(std::ostream &stream, const Fraction &fraction) {
  Fraction f = fraction.reduce();
  return stream << f.getNumerator() << "/" << f.getDenominator();
}
 
// операторы арифметических действий
Fraction operator+(const Fraction &a, const Fraction &b) {
  return a.add(b);
}
Fraction operator-(const Fraction &a, const Fraction &b) {
  return a.subtract(b);
}
Fraction operator*(const Fraction &a, const Fraction &b) {
  return a.multiply(b);
}
Fraction operator/(const Fraction &a, const Fraction &b) {
  return a.divide(b);
}
 
// ну и для полноты картины операторы сравнения
bool operator<(const Fraction &a, const Fraction &b) {
  return a.compare(b) < 0;
}
 
bool operator<=(const Fraction &a, const Fraction &b) {
  return a.compare(b) <= 0;
}
 
bool operator>(const Fraction &a, const Fraction &b) {
  return a.compare(b) > 0;
}
 
bool operator>=(const Fraction &a, const Fraction &b) {
  return a.compare(b) >= 0;
}
 
bool operator==(const Fraction &a, const Fraction &b) {
  return a.compare(b) == 0;
}
 
bool operator!=(const Fraction &a, const Fraction &b) {
  return a.compare(b) != 0;
}
 
int main(int, char**) {
  // можно функциями, но читается плохо
  std::cout << Fraction(1, 4).multiply(Fraction(1).divide(Fraction(2, 3).add(Fraction(5, 6)))) << std::endl;
  
  // операторами удобнее
  std::cout << Fraction(1, 4) * (1 / (Fraction(2, 3) + Fraction(5, 6))) << std::endl;
}
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
30.05.2013, 12:20     Организовать производный класс, содержащий функции вычисления деления и умножения дробей #6
Цитата Сообщение от roker2010 Посмотреть сообщение
деление и умножение дробей и приведение к несократимому виду
Тоже уже есть в коде. Вы его хоть почитайте для приличия.
Yandex
Объявления
30.05.2013, 12:20     Организовать производный класс, содержащий функции вычисления деления и умножения дробей
Ответ Создать тему
Опции темы

Текущее время: 12:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru