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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MahovIV
5 / 6 / 1
Регистрация: 17.09.2013
Сообщений: 337
#1

Класс рациональных дробей - C++

12.03.2014, 19:09. Просмотров 243. Ответов 0
Метки нет (Все метки)

Разработать класс рациональных дробей. Предусмотреть в нём все методы, которые необходимы, чтобы новый тип данных мог быть использован наравне с системными типами: арифметические операции, операции сравнения, преобразования тип.
Программа выглядит вот-так:
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
#include <iostream>
#include <conio.h>
 
#define show(x) #x << " = " << x << "  "
#define test(x) if(x) cout << #x << endl
// Âû÷èñëåГ*ГЁГҐ ГЌГЋГ„ = ГЌГ*èáîëüøèé îáùèé äåëèòåëü
// GCD = Greatest Common Divider (ГЇГ®-Г*Г*ãëèéñêè)
long GCD( long a, long b ){ return b==0 ? a : GCD(b,a%b); }
 
// ГЉГ«Г*Г±Г± "ГђГ*öèîГ*Г*ëüГ*Г*Гї äðîáü"
class Rat {
  void init( long n, long d ){ 
    long gcd = GCD(n,d); // âû÷èñëÿåì Г*Г*èáîëüøèé îáùèé äåëèòåëü ÷èñëèòåëÿ ГЁ Г§Г*Г*ìåГ*Г*òåëÿ
    // ÑîêðГ*Г№Г*ГҐГ¬ äðîáü 
    this->n = n/gcd; 
    this->d = d/gcd; 
    curObj++; 
    constCalls++; 
  };
public:   
  static int curObj /* ГІГҐГЄГіГ№ГҐГҐ êîë-ГўГ® îáúåêòîâ */, constCalls /* êîë-ГўГ® âûçîâîâ ГЄГ®Г*ñòðóêòîðîâ */; 
  long n,d; // ×èñëèòåëü ГЁ Г§Г*Г*ìåГ*Г*òåëü nominator/denominator 
  Rat(long n, long d) { init(n,d); } // "ГЋГ±Г*îâГ*îé" ГЄГ®Г*ñòðóêòîð
  Rat(const Rat& x) { init(x.n,x.d); }; // ГЉГ®Г*ñòðóêòîð êîïèðîâГ*Г*ГЁГї
  Rat() { init(0,1); } // ГЉГ®Г*ñòðóêòîð "ГЇГ®-óìîë÷Г*Г*ГЁГѕ", äðîáü Г°Г*ГўГ*Г*Гї 0 - 0/1
  ~Rat() { curObj--; } // Äåñòðóêòîð (óìåГ*ГјГёГ*ГҐГІ êîëè÷åñòâî îáúåêòîâ)
  // Àðèôìåòè÷åñêèå îïåðГ*öèè
  Rat operator+(const Rat& x) const { return Rat( n*x.d+d*x.n, d*x.d ); }
  Rat operator-(const Rat& x) const { return Rat( n*x.d-d*x.n, d*x.d ); }
  Rat operator*(const Rat& x) const { return Rat( x.n*n, x.d*d ); }
  Rat operator/(const Rat& x) const { return Rat( n*x.d, d*x.n ); }
  // ГЋГЇГҐГ°Г*öèè Г±Г°Г*ГўГ*ГҐГ*ГЁГї
  bool operator==(const Rat& x) const { return n*x.d == d*x.n; }
  bool operator!=(const Rat& x) const { return n*x.d != d*x.n; }
  bool operator>(const Rat& x) const { return n*x.d > d*x.n; }
  bool operator<(const Rat& x) const { return n*x.d < d*x.n; }
  bool operator>=(const Rat& x) const { return n*x.d >= d*x.n; }
  bool operator<=(const Rat& x) const { return n*x.d <= d*x.n; }
};
 
// Г€Г*èöèГ*ëèçèðóåì Г±ГІГ*ГІГЁГ·ГҐГ±ГЄГЁГҐ ïåðåìåГ*Г*ûå
int Rat::curObj = 0, Rat::constCalls = 0;
 
using namespace std;
 
// ÏåðåãðóçêГ* îïåðГ*öèè âûâîäГ* Гў ïîòîê äëÿ ГЄГ«Г*Г±Г±Г* "ГђГ*öèîГ*Г*ëüГ*Г*Гї äðîáü"
ostream& operator << ( ostream& os, const Rat& x ){ return os << x.n << "/" << x.d; };
 
// ГЋГ±Г*îâГ*Г*Гї ïðîãðГ*ììГ* - äåìîГ*Г±ГІГ°Г*öèÿ âîçìîæГ*îñòåé ГЄГ«Г*Г±Г±Г* "ГђГ*öèîГ*Г*ëüГ*Г*Гї äðîáü"
void demoRat(){
     int n1, n2, d1, d2;
     cin >> n1 >> n2;
     cin >> d1 >> d2;
     Rat a(n1, n2), b(d1, d2), c = a * b + a / b;
  cout << show(a) << show(b) << endl;
  cout << show(a+b) << show(a-b) << show(a*b) << show(a/b) << endl;
  test(a==b); test(a!=b); test(a>b); test(a<b); test(a>=b); test(a<=b); test( a*b == b*a );
}
 
int main() {
  demoRat();
  cout << "Îáúåêòîâ Гў ГЇГ*ìÿòè = " << Rat::curObj << "   Âûçîâîâ ГЄГ®Г*ñòðóêòîðîâ = " << Rat::constCalls << endl; 
  getch();   
  return 0;
}
Помогите закончить.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2014, 19:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс рациональных дробей (C++):

Класс рациональных дробей - C++
Написать пользоват. тип рациональных дробей. Внутреннее представление типа: int a, b; должно быть таким, что число a/b должно...

Разработать класс рациональных дробей - C++
азработать класс рациональных дробей. Предусмотреть в нём все методы, которые необходимы, чтобы новый тип данных мог быть использован...

преобразование к типу double (класс рациональных дробей) - C++
Имеется класс рациональных дробей (чтоб код лишним не нагружать оставил только перегрузки операций сложения дробей и чисел). все работает и...

Матрица рациональных дробей - C++
П.5.4.Правил Запрещено создавать темы с бессмысленными названиями вроде &quot;Помогите!&quot;, &quot;Вопрос&quot; и т.п. Есть матрица.txt, нужно...

Калькулятор рациональных дробей - C++
Первая программа принимает от пользователя три строки, (первая и третья строки – это правильные рациональные или десятичные дроби вида ...

Олимпиадное задание "Калькулятор рациональных дробей" - C++
Калькулятор рациональных дробей (выполнение операций сложения, вычитания, умножения, деления).

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2014, 19:09
Привет! Вот еще темы с ответами:

Определить класс для рациональных чисел - C++
Начало изучения понятия класса и объекта в С++, для меня много не ясного. Помогите, пожалуйста. Задача: необходимо Определить класс...

Класс дробей - C++
Кто-нибудь может проверить код (программа производит операции с дробями, сокращает их, проверяет на переполнение и переопределяет &lt;&lt;)? Не...

Определите класс дробей. Определите класс дробей - C++
Привет всем, подходит время сессии) должки нужно закрывать нужно решить гиганское количество задач по c++ на классы, кто хорошо разбирается...

Класс дробей Rational - C++
Разработайте и протестируйте класс Rational, представляющий рациональное число (простую дробь) в виде пары целых чисел: числитель...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru