1+ // Создайте класс Rational (рациональная дробь)
2+
3+ // TODO:
4+ // приватные поля для данных
5+ // конструктор, содержащий значения по умолчанию
6+ // функции-элементы установки и извлечения значений
7+ // перегруженные операторы ввода и вывода
8+ // конструктор копий
9+ // оператор присваивания
10+ // указанные в задании перегруженные операции
11+ // ++ -- -n == != = + += - -= * *= / /= > < >= <=
12+
13+ // Исправить:
14+ // * - поправить вывод
15+ // * - !!!учесть отрицательные числа
16+
17+ // Доп:
18+ // * - добавить целую часть (в сам класс)
19+ // * - операции, соотв., с учетом целой части дробей
20+ // * - сортировка Шелла массива дробей
21+
22+ #include " rational.h"
23+ using namespace std ;
24+
25+ // тестирование функций класса
26+ int main () {
27+ int test_n = 0 ;
28+ cout << " Run test #" ;
29+ cin >> test_n;
30+
31+ switch (test_n) {
32+ case 0 : {
33+ Rational r1 (-11205729 , 14420 ), r2 (3349 , 14420 ), r3 (11207689 , 14420 ), r4 (5439 , 103 );
34+ cout << r1 << " = " << r1.normalize () << " = " << r1.normalize () << " = " << r1.denormalize () << endl;
35+ cout << r2 << " = " << r2.normalize () << " = " << r2.normalize () << " = " << r2.denormalize () << endl;
36+ cout << r3 << " = " << r3.normalize () << " = " << r3.normalize () << " = " << r3.denormalize () << endl;
37+ cout << r4 << " = " << r4.normalize () << " = " << r4.normalize () << " = " << r4.denormalize () << endl;
38+ break ;
39+ }
40+
41+ case 1 : {
42+ // тут тестируются:
43+ // конструкторы, геттеры, сеттеры,
44+ // вывод, конструктор копий, присваивания
45+
46+ Rational lol (1 , 2 ), kek = {2 , 3 };
47+ cout << " Rational 1 / 2: " << lol << endl;
48+ cout << " Rational 2 / 3: " << kek << endl;
49+
50+ Rational temp (618 );
51+ cout << " Int 618 to Rational: " << temp << endl;
52+
53+ Rational test (42 , 618 );
54+ cout << " 42 / 618 = " << test << " -> " ;
55+
56+ test.set (618 , 42 );
57+ cout << test << " -> " ;
58+ cout << test.numerator () << " / "
59+ << test.denominator () << " -> " ;
60+
61+ test.numerator () = 6 ;
62+ test.denominator () = 18 ;
63+ cout << test << endl;
64+
65+ Rational test_copy (test);
66+ cout << test << " = " << test.simplify ()
67+ << " => copy: " << test_copy << endl;
68+
69+ lol = kek = temp = test;
70+ cout << lol << " , "
71+ << kek << " , "
72+ << temp << endl;
73+ break ;
74+ }
75+
76+ case 2 : {
77+ // тут тестируются:
78+ // ++ -- -n + += - -= * *= / /=
79+
80+ Rational lol (42 , 618 );
81+ Rational kek (69 , 420 );
82+ long long abc = 777 ;
83+
84+ cout << " ++" << lol << " = " << ++lol << " \n " ;
85+ cout << " --" << lol << " = " << --lol << " \n " ;
86+ cout << " -" << lol << " = " << -lol << " \n " ;
87+
88+ cout << lol << " + " << kek << " = " << lol + kek << endl;
89+ cout << lol << " + " << abc << " = " << lol + abc << endl;
90+ cout << abc << " + " << lol << " = " << abc + lol << endl;
91+
92+ cout << lol << " - " << kek << " = " << lol - kek << endl;
93+ cout << lol << " - " << abc << " = " << lol - abc << endl;
94+ cout << abc << " - " << lol << " = " << abc - lol << endl;
95+
96+ cout << lol << " * " << kek << " = " << (lol * kek).normalize () << endl;
97+ cout << lol << " * " << abc << " = " << (lol * abc).normalize () << endl;
98+ cout << abc << " * " << lol << " = " << (abc * lol).normalize () << endl;
99+
100+ cout << lol << " / " << kek << " = " << lol / kek << endl;
101+ cout << lol << " / " << abc << " = " << lol / abc << endl;
102+ cout << abc << " / " << lol << " = " << abc / lol << endl;
103+
104+ lol = {42 , 618 };
105+ kek = {69 , 420 };
106+ abc = 777 ;
107+ cout << lol << " += " << kek << " -> " << (lol += kek) << endl;
108+ cout << lol << " += " << abc << " -> " << (lol += abc) << endl;
109+
110+ lol = {42 , 618 };
111+ kek = {69 , 420 };
112+ abc = 777 ;
113+ cout << lol << " -= " << kek << " -> " << (lol -= kek) << endl;
114+ cout << lol << " -= " << abc << " -> " << (lol -= abc) << endl;
115+
116+ lol = {42 , 618 };
117+ kek = {69 , 420 };
118+ abc = 777 ;
119+ cout << lol << " *= " << kek << " -> " << (lol *= kek) << endl;
120+ cout << lol << " *= " << abc << " -> " << (lol *= abc) << endl;
121+
122+ lol = {42 , 618 };
123+ kek = {69 , 420 };
124+ abc = 777 ;
125+ cout << lol << " /= " << kek << " -> " << (lol /= kek) << endl;
126+ cout << lol << " /= " << abc << " -> " << (lol /= abc) << endl;
127+
128+ break ;
129+ }
130+
131+ case 3 : {
132+ // тут тестируются:
133+ // == != > >= < <=
134+
135+ Rational testA (1 , 2 );
136+ Rational testB (1 , 2 );
137+
138+ if (testA == testB)
139+ cout << " testA == testB" << endl;
140+ if (testA == testA)
141+ cout << " testA == testA" << endl;
142+
143+ Rational testNew (testA);
144+ if (testA == testNew)
145+ cout << " testA == testNew" << endl;
146+
147+ cout << ++testNew << " , " << testNew << endl;
148+ if (testA == testNew)
149+ cout << " testA == testNew" << endl;
150+
151+ cout << testA++ << " , " << testA << endl;
152+ if (testA == testNew)
153+ cout << " testA == testNew" << endl;
154+
155+ Rational temp (10 , -20 );
156+ cout << temp << " , " << temp.simplify () << " , " << temp << endl;
157+
158+ Rational lol = {42 , 618 }, kek = {69 , 420 };
159+ cout << lol << " > " << kek << (lol > kek ? " = True" : " = False" ) << endl;
160+ cout << lol << " >= " << kek << (lol >= kek ? " = True" : " = False" ) << endl;
161+ cout << lol << " < " << kek << (lol < kek ? " = True" : " = False" ) << endl;
162+ cout << lol << " <= " << kek << (lol <= kek ? " = True" : " = False" ) << endl;
163+ break ;
164+ }
165+
166+ case 4 : {
167+ cout << " \n //-- Summ Test --//\n\n " ;
168+ Rational rr;
169+ for (int i = 1 ; i < 30 ; i++) {
170+ Rational temp (1 , i);
171+ rr = rr + temp;
172+ cout << rr << " = " << rr.get_value () << endl;
173+ }
174+ break ;
175+ }
176+
177+ case 5 : { // shell sort
178+ int count = 9 ;
179+ Rational *arr[count] = {
180+ new Rational (1 , 2 ),
181+ new Rational (12 , 21 ),
182+ new Rational (13 , 22 ),
183+ new Rational (14 , 23 ),
184+ new Rational (15 , 24 ),
185+ new Rational (0 , 1 ),
186+ new Rational (666 , 6 ),
187+ new Rational (16 , 25 ),
188+ new Rational (17 , 26 )
189+ };
190+
191+ cout << " original:\n " ;
192+ for (int i = 0 ; i < count; i++) {
193+ cout << *(arr[i]) << endl;
194+ }
195+
196+ ShellSort (count, arr);
197+ cout << " sorted:\n " ;
198+ for (int i = 0 ; i < count; i++) {
199+ cout << *(arr[i]) << endl;
200+ }
201+ }
202+ }
203+ }
0 commit comments