Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cmath>
- #include <map>
- #include <string>
- #include <algorithm>
- #include <iostream>
- #include <set>
- #include <utility>
- #include <vector>
- #include <numeric>
- #include <chrono>
- #include <type_traits>
- #include <cassert>
- #include <sstream>
- #include <unordered_map>
- using namespace std;
- class Rational{
- public:
- Rational() = default;
- Rational(int numerator): numerator_(numerator), denominator_(1){}
- Rational(int numerator, int denominator): numerator_(numerator), denominator_(denominator){
- Normalize();
- }
- int Numerator() const{
- return numerator_;
- }
- int Denominator() const{
- return denominator_;
- }
- friend ostream &operator << (ostream &output, Rational rational){
- return output << rational.Numerator() << '/' << rational.Denominator();
- }
- friend istream &operator >> (istream &input, Rational &rational){
- int numerator;
- int denominator;
- char slash;
- if((input >> numerator) && (input >> slash) && (slash == '/') && (input >> denominator)){
- rational = Rational{numerator, denominator};
- }
- return input;
- }
- friend Rational operator * (Rational a, Rational b){
- return {a.Numerator() * b.Numerator(), a.Denominator() * b.Denominator()};
- }
- friend Rational operator / (Rational &a, Rational &b){
- return {a.Numerator() * b.Denominator(), a.Denominator() * b.Numerator()};
- }
- friend Rational operator += (Rational &a, Rational &b){
- return {a.Numerator() * b.Denominator() + b.Numerator() * a.Denominator(), a.Denominator() * b.Denominator()};
- }
- friend Rational operator -= (Rational &a, Rational &b){
- return {a.Numerator() * b.Denominator() - b.Numerator() * a.Denominator(), a.Denominator() * a.Denominator()};
- }
- friend Rational operator *= (Rational &a, Rational &b){
- return {a.Numerator() * b.Numerator(), a.Denominator() * b.Denominator()};
- }
- friend Rational operator /= (Rational &a, Rational &b){
- return {a.Numerator() * b.Denominator(), a.Denominator() * b.Numerator()};
- }
- friend Rational operator + (Rational a, Rational b){
- return {a.Numerator() * b.Denominator() + b.Numerator() * a.Denominator(), a.Denominator() * b.Denominator()};
- }
- friend Rational operator - (Rational &a, Rational &b){
- return {a.Numerator() * b.Denominator() - b.Numerator() * a.Denominator(), a.Denominator() * a.Denominator()};
- }
- friend Rational operator + (Rational &value){
- return value;
- }
- friend Rational operator - (Rational &value){
- return {-value.Numerator(), value.Denominator()};
- }
- friend bool operator > (const Rational a, const Rational b){
- return a < b;
- //return (a.Numerator() / static_cast<double>(a.Denominator())) > static_cast<double>(b.Numerator() / static_cast<double>(b.Denominator()));
- }
- friend bool operator < (const Rational a, const Rational b){
- //return (a.Numerator() / static_cast<double>(a.Denominator())) < (b.Numerator() / static_cast<double>(b.Denominator()));
- return (static_cast<int>(a.numerator_) * static_cast<int>(b.denominator_)) < (static_cast<int>(b.numerator_) * static_cast<int>(a.denominator_));
- }
- friend bool operator == (const Rational a, const Rational b){
- return (a) == (b);
- /*if((a.Numerator() == b.Numerator()) && (a.Denominator() == b.Denominator())){
- return true;
- } else{
- return false;
- }*/
- }
- friend bool operator != (const Rational a, const Rational b){
- return !(a == b);
- }
- friend bool operator <= (const Rational a, const Rational b){
- return !(a > b);
- }
- friend bool operator >= (const Rational a, const Rational b){
- return !(a < b);
- }
- ~Rational(){};
- private:
- void Normalize(){
- if(denominator_ < 0){
- numerator_ = -numerator_;
- denominator_ = -denominator_;
- }
- int n = gcd(numerator_, denominator_);
- numerator_ /= n;
- denominator_ /= n;
- }
- int numerator_ = 0;
- int denominator_ = 1;
- };
- int main(){
- setlocale(LC_ALL,"");
- Rational r1, r2;
- cout << "Введите первую дробь: "s;
- cin >> r1;
- cout << "Введите вторую дробь: "s;
- cin >> r2;
- cout << "Их сумма равна: "s << r1 + r2 << endl;
- cout << "Введите целое число: "s;
- int integer;
- cin >> integer;
- cout << "Их сумма равна: "s << r1 + integer << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment