-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfraction-friends.cpp
110 lines (97 loc) · 2.47 KB
/
fraction-friends.cpp
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
#include "fraction.h"
//#include <typeinfo>
std::ostream& operator<<(std::ostream& out, const fraction &frac) //tested
{
out<<frac.num;
if(frac.denom != 1)
out<<"/"<<frac.denom;
return out;
}
std::istream& operator>>(std::istream& in, fraction &frac) //tested
{
char junk;
int part1, part2;
if(in>>part1)
{
if(in.peek() == '/') {
in>>junk>>part2;
frac.setValue(part1, part2);
}
else if(in.peek() == '.')
{
in>>junk>>part2;
double doublePart = frac.makeDouble(part1, part2);
frac.DecimaltoFrac(doublePart, frac.num, frac.denom);
frac.reduce();
}
else{
frac.num = part1;
frac.denom = 1;
}
}
else
std::cout<<"Wrong fraction input"<<std::endl;
return in;
}
fraction operator+(const fraction &x,const fraction &y)
{
fraction result;
int num = x.num * y.denom + y.num * x.denom,
denom = x.denom * y.denom;
result.setValue(num,denom);
return result;
}
fraction operator-(const fraction &x,const fraction &y)
{
fraction result;
int num = x.num * y.denom - y.num * x.denom,
denom = x.denom * y.denom;
result.setValue(num,denom);
return result;
}
fraction operator*(const fraction &x,const fraction &y)
{
fraction result;
int num = x.num * y.num,
denom = x.denom * y.denom;
result.setValue(num,denom);
return result;
}
fraction operator/(const fraction &x,const fraction &y)
{
fraction result;
int num = x.num * y.denom,
denom = x.denom * y.num;
result.setValue(num,denom);
return result;
}
fraction operator^(const fraction &x,const fraction &y) //TESTED, KINDA WORKS
{
double temp1 = pow(pow(x.num, y.num),1./y.denom),
temp2 = pow(pow(x.denom, y.num),1./y.denom);
return temp1/temp2;
}
bool operator==(const fraction &x,const fraction &y)
{
return x.num * y.denom == y.num * x.denom;
}
bool operator>=(const fraction &x,const fraction &y)
{
return x.num * y.denom >= y.num * x.denom;
}
bool operator<=(const fraction &x,const fraction &y)
{
return x.num * y.denom <= y.num * x.denom;
}
bool operator!=(const fraction &x,const fraction &y)
{
return x.num * y.denom != y.num * x.denom;
}
bool operator<(const fraction &x,const fraction &y)
{
return x.num * y.denom < y.num * x.denom;
}
bool operator>(const fraction &x,const fraction &y)
{
return x.num * y.denom > y.num * x.denom;
}