Facebook
From Ample Pudu, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 195
  1. // 24_10_18.cpp : This file contains the 'main' function. Program execution begins and ends there.
  2. //
  3.  
  4. #include "pch.h"
  5. #include <iostream>
  6. #include <cassert>
  7.  
  8. using namespace std;
  9.  
  10. class Fraction {
  11.         int m_num, n_dem;
  12.  
  13. public:
  14.         Fraction(int n = 0, int m = 1) :m_num(n), n_dem(m)
  15.         {
  16.                 reduce(); //odrazu skraca przy uruchomieniu
  17.         }
  18.  
  19.  
  20.         friend Fraction operator+(const Fraction &f1, const Fraction &f2)
  21.         {
  22.                 return Fraction(f1.m_num*f2.n_dem + (f2.m_num*f1.n_dem), f1.n_dem*f2.n_dem);
  23.         }
  24.  
  25.         friend Fraction operator-(const Fraction &f1, const Fraction &f2)
  26.         {
  27.                 return Fraction(f1.m_num*f2.n_dem - (f2.m_num*f1.n_dem), f1.n_dem*f2.n_dem);
  28.         }
  29.         friend Fraction operator*(const Fraction &f1, const Fraction &f2)
  30.         {
  31.                 return Fraction(f1.m_num*f2.m_num, f1.n_dem*f2.n_dem);
  32.         }
  33.         friend Fraction operator/(const Fraction &f1, const Fraction &f2)
  34.         {
  35.                 return Fraction(f1.m_num*f2.n_dem, f1.n_dem*f2.m_num);
  36.         }
  37.  
  38.         friend ostream& operator<<(ostream& out, const Fraction& f)
  39.         {
  40.                 out << f.m_num << "/" << f.n_dem;
  41.                 return out;
  42.         }
  43.  
  44.         friend istream& operator>>(istream& in, Fraction& f)
  45.         {
  46.                 char a;
  47.                 in >> f.m_num;
  48.                 in >> a;
  49.                 in >> f.n_dem;
  50.                 assert(f.n_dem > 0);
  51.                 assert(a == '/');
  52.                 return in;
  53.         }
  54.  
  55.         operator double() {
  56.  
  57.                 return ((double)m_num / (double)n_dem);
  58.         }
  59.  
  60.         Fraction& operator++() { //inkrementacja
  61.                 m_num += n_dem; // zwraca a/b + 1 = (a+b)/b;
  62.                 return *this;
  63.         }
  64.  
  65.         Fraction& reduce()
  66.         {
  67.                 int min_value = abs(m_num) < abs(n_dem) ? abs(m_num) : abs(n_dem);
  68.                 int divisor = 2;
  69.                 while (divisor <= min_value)
  70.                 {
  71.                         if (abs(m_num) % divisor == 0 && (abs(n_dem) % divisor) == 0)
  72.                         {
  73.                                 m_num /= divisor;
  74.                                 n_dem /= divisor;
  75.                                 min_value /= divisor;
  76.                                 divisor = 2;
  77.                         }
  78.                         else
  79.                         {
  80.                                 divisor++;
  81.                         }
  82.                 }
  83.                 return *this;   //to oznacza biezacy obiekt
  84.         }
  85.        
  86. };
  87. int main()
  88. {
  89.         Fraction f1;
  90.         Fraction f2;
  91.         cout << "Enter fraction1:" << endl;
  92.         cin >> f1;
  93.         cout << "Enter fraction2:" << endl;
  94.         cin >> f2;
  95.         cout << "f1+f2=" << f1 + f2 << endl;
  96.         cout << "f1*f2=" << f1 * f2 << endl;
  97.         cout << "f1 as double=" << (double)f1 << endl;
  98.         cout << "++f1=" << ++f1 << endl;
  99.  
  100.         return 0;
  101. }
  102.