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

Определить класс для рациональных чисел - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.91
QWERY_2012
5 / 5 / 2
Регистрация: 09.09.2012
Сообщений: 227
06.10.2012, 10:10     Определить класс для рациональных чисел #1
Начало изучения понятия класса и объекта в С++, для меня много не ясного.
Помогите, пожалуйста.

Задача: необходимо Определить класс (Rational) для рациональных чисел. Рациональное число - число кот может быть представлено как отношение двух целых чисел: 1/2, 3/4, 64/2 и т.д. Включить конструктор с 2 аргументами, кот может быть использован для установления member переменных объекта с любыми легальными значениями. Так же включить конструктор, кот имеет только 1 параметр типа int, вызывает единственный параметр whole_number и определяет конструктор так что объект инициализуется как рациональное число - whole_number/1. Так же включить default конструктор кот инициализует объект как 0 (0/1).

Overload - Перегрузить input and output операторы << и >>. Числа в input and output должны быть в форме 1/2, 15/32, 300/401 и т.д. и могут содержать отрицательные значения -1/2, -300/401. Overload - Перегрузить все следующие операторы: корректно применяемые к типу Rational: ==, <, <=, >, >=, +,-, * и /.
Так же написать тест-программы для тестирования данного класса:
Rational test1, test2(10), test3(1, 2);

test1 - the default (no argument) constructor,
test2 calls a constructor with one argument,
test3 calls the constructor with two arguments. test3 is equal to 0.5, with 1 on the top and 2 on the bottom.

Все операторы требуется should be provided for the Rational class as overloaded, Friend functions. In general, you should be able to execute code such as following:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// Display the three values to test cout
cout << "\nTest1 equals " << test1;
cout << "\nTest2 equals " << test2;
cout << "\nTest3 equals " << test3;
// Test our operators
cout << "\nTest1 * Test2 equals " << test1*test2;
cout << "\nTest1 / Test3 equals " << test1/test3;
cout << "\nTest2 + Test3 equals " << test2+test3;
cout << "\nTest3 - Test1 equals " << test3-test1;
if (test1 == test2)
cout << "\nTest1 is equal to Test2";
if (test1 < test2)
cout << "\nTest1 is less than Test2";


Пример раб. программы:
Please enter two non-zero integers: 14 6
Please enter Rational number: (22, 4)

Test1 equals (7, 3)
Test2 equals (14, 1)
Test3 equals (11, 2)
Test1 * Test2 equals (98, 3)
Test1 / Test3 equals (14, 33)
Test2 + Test3 equals (39, 2)
Test3 - Test1 equals (19, 6)
Test1 is less than Test2
Test2 is greater than Test3
Test3 is greater than or equal to Test1

Another test case?

Добавлено через 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
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
class Rational
{
public:
    friend Rational operator +(const Rational& num1, const Rational& num2);
 
    friend Rational operator -(const Rational& num1, const Rational& num2);
    
    friend Rational operator -(const Rational& num2);
    
    friend Rational operator < (const Rational& num1, const Rational& num2);
    
    friend Rational operator <= (const Rational& num1, const Rational& num2);
    
    friend Rational operator > (const Rational& num1, const Rational& num2);
    
    friend Rational operator >= (const Rational& num1, const Rational& num2);
      
    friend Rational operator *(const Rational& num1, const Rational& num2);
 
    friend bool operator == (const Rational& num1, const Rational& num2);
    
    
    Rational test3(int num 1, num 2);
    Rational test2(int num);
    Rational test1();
 
 
    friend ostrem& operator <<(ostream& outs, const Rational&);
    friend istream& operator >>(istream& ins, Rational&  );
    
    
    Rational(int top_num, int bottom_num);
    Rational( );
 
    double get_value( ) const;
 
    void input(istream& ins);
    void output(ostream& outs) const;
       
    
private:
    int top_num;
    int bottom_num;
};
 
  
  
int main
{
 
// Display the three values to test cout
    cout << "\nTest1 equals " << test1;
    cout << "\nTest2 equals " << test2;
    cout << "\nTest3 equals " << test3;
    
    
// Test our operators
    cout << "\nTest1 * Test2 equals " << test1*test2;
    cout << "\nTest1 / Test3 equals " << test1/test3;
    cout << "\nTest2 + Test3 equals " << test2+test3;
    cout << "\nTest3 - Test1 equals " << test3-test1;
    
    
    if (test1 == test2)
        cout << "\nTest1 is equal to Test2";
    if (test1 < test2)
        cout << "\nTest1 is less than Test2";
 
 
 
 
 
 
 
 
 
  system("Pause");
  return 0;
 
} 
       
      Rational operator +(const Rational& num1, const Rational& num2)
      {
       Rational.temp;
       temp.sum = num1.sum + num2.sum;
       return temp;        
      } 
       
       Rational operator -(const Rational& num1, const Rational& num2)
      {
       Rational.temp;
       temp.difer = num1.difer + num2.difer;
       return temp;        
      } 
      
      
      
      bool operator ==(const Rational& num1, const Rational& num2)
      {
        return (num1.equal == num2.equal);     
      }
      
       
       
       ostrem& operator <<(ostream& outs, const  )
       {
               return outs;
               }
       istream& operator >>(istream& ins, const  )
       {
                return ins;
                }
Добавлено через 50 минут
Кто нибудь - хотя бы направление в кот мне двигаться. Если что-то не ясно в постановке задачи - пишите.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2012, 10:10     Определить класс для рациональных чисел
Посмотрите здесь:

Калькулятор рациональных чисел C++
C++ Класс рациональных дробей
Создать класс Triad (тройка чисел); определить методы изменения полей и вычисления суммы чисел. C++
Двумерный массив рациональных чисел + среднее арифметическое чисел массива + сортировка методом вставки C++
C++ Сравнение рациональных чисел
C++ Создать класс Triad (тройка чисел) - определить методы; определить производный класс Date - переопределить методы
Создать файл для определения класса рациональных чисел с перегрузкой операторов C++
Разработать класс рациональных дробей C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
06.10.2012, 14:01     Определить класс для рациональных чисел #2
Rational.h
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
#ifndef RATIONAL_H
#define RATIONAL_H
 
#include <iostream>
 
class Rational
{
public:
    explicit Rational(int num_ = 0, int den_ = 1) : num(num_), den(den_)
    {
        Make();
    }
    void Make ();
    friend std::ostream& operator << (std::ostream& , Rational const&);
    friend std::istream& operator>> (std::istream& , Rational&);
    friend Rational const operator+ (Rational const&, Rational const&);
    friend Rational const operator- (Rational const&, Rational const&);
    friend Rational const operator* (Rational const&, Rational const&);
    friend Rational const operator/ (Rational const&, Rational const&);
    friend bool operator< (Rational const&, Rational const&);
    friend bool operator== (Rational const&, Rational const&);
    friend bool operator> (Rational const&, Rational const&);
    friend bool operator<= (Rational const&, Rational const&);
    friend bool operator>= (Rational const&, Rational const&);
private:
    int num, den;
};
 
#endif // RATIONAL_H
Rational.cpp
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
#include <iostream>
#include <stdexcept>
#include <cmath>
#include <string>
#include <sstream>
#include "Rational.h"
 
void Rational::Make()
{
    if(!den)
        throw std::invalid_argument("denominator should not be zero");
    if(((num >> (sizeof(num) * 8 - 1)) ^ (den >> (sizeof(den) * 8 - 1))) & 1)
        num = -std::abs(num);
    else
        num = std::abs(num);
    den = std::abs(den);
}
 
std::ostream& operator <<(std::ostream& ost, Rational const& r)
{
    return ost << r.num << '/' << r.den;
}
 
std::istream& operator>>(std::istream& ist, Rational& r) // e.g. (5, -2)
{
    std::string s;
    std::getline(ist, s, ')');
    std::string::size_type ind;
    while((ind = s.find_first_of("(,)")) != std::string::npos)
        s.replace(ind, 1, 1, ' ');
    std::istringstream iss(s);
    iss >> r.num >> r.den;
    r.Make();
    return ist;
}
 
Rational const operator+ (Rational const& lhs, Rational const& rhs)
{
    return Rational(lhs.num * rhs.den + rhs.num * lhs.den, lhs.den * rhs.den);
}
 
Rational const operator- (Rational const& lhs, Rational const& rhs)
{
    return lhs + Rational(-rhs.num, rhs.den);
}
 
Rational const operator* (Rational const& lhs, Rational const& rhs)
{
    return Rational(lhs.num * rhs.num, lhs.den * rhs.den);
}
 
Rational const operator/ (Rational const& lhs, Rational const& rhs)
{
    return lhs * Rational(rhs.den, rhs.num);
}
 
bool operator< (Rational const& lhs, Rational const& rhs)
{
    return double(lhs.num) / lhs.den < double(rhs.num) / rhs.den;
}
 
bool operator== (Rational const& lhs, Rational const& rhs)
{
    return !(lhs < rhs || rhs < lhs);
}
 
bool operator> (Rational const& lhs, Rational const& rhs)
{
    return rhs < lhs;
}
 
bool operator<= (Rational const& lhs, Rational const& rhs)
{
    return !(rhs < lhs);
}
 
bool operator>= (Rational const& lhs, Rational const& rhs)
{
    return !(lhs < rhs);
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include "Rational.h"
 
int main()
{
    using namespace std;
    Rational test1, test2, test3(2, 6);
    std::cin >> test1 >> test2 >> test3;
    cout << "\nTest1 equals " << test1;
    cout << "\nTest2 equals " << test2;
    cout << "\nTest3 equals " << test3;
    // Test our operators
    cout << "\nTest1 * Test2 equals " << test1*test2;
    cout << "\nTest1 / Test3 equals " << test1/test3;
    cout << "\nTest2 + Test3 equals " << test2+test3;
    cout << "\nTest3 - Test1 equals " << test3-test1;
    if (test1 == test2)
    cout << "\nTest1 is equal to Test2";
    if (test1 < test2)
    cout << "\nTest1 is less than Test2";
    return 0;
}
QWERY_2012
5 / 5 / 2
Регистрация: 09.09.2012
Сообщений: 227
07.10.2012, 04:52  [ТС]     Определить класс для рациональных чисел #3
Спасибо огромное!!!
Буду разбираться.
Yandex
Объявления
07.10.2012, 04:52     Определить класс для рациональных чисел
Ответ Создать тему
Опции темы

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