Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.48 KB | None | 0 0
  1. // classfrac.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <cmath>
  7. #include <cstdlib>
  8. #include <cstdio>
  9.  
  10. using namespace std;
  11.  
  12. class zFrac {
  13. public:
  14.     zFrac() : num(0), denom(1) {};
  15.     explicit zFrac(const int aNum) : num(aNum), denom(1) {};
  16.     zFrac(const int aNum, const int aDenom) : num(aNum), denom(aDenom) { norm(); };
  17.  
  18.     void norm() {
  19.         int numTemp = abs(num), denomTemp = abs(denom);
  20.         while (numTemp * denomTemp) {
  21.             if (numTemp > denomTemp) numTemp %= denomTemp;
  22.             else denomTemp %= numTemp;
  23.         }
  24.         num /= (numTemp + denomTemp);
  25.         denom /= (numTemp + denomTemp);
  26.     }
  27.  
  28.  
  29.     zFrac& operator += (zFrac const &r) {
  30.         num = num * r.denom + r.num * denom;
  31.         denom *= r.denom;
  32.         this->norm();
  33.         return *this;
  34.     }
  35.  
  36.     zFrac& operator += (int a) {
  37.         zFrac temp(a);
  38.         *this += temp;
  39.         return *this;
  40.     }
  41.  
  42.     zFrac operator + (zFrac const &r) const {
  43.         zFrac temp(*this);
  44.         temp += r;
  45.         return temp;
  46.     }
  47.  
  48.     zFrac& operator -= (zFrac const &r) {
  49.         num = num * r.denom - denom * r.num;
  50.         denom = denom * r.denom;
  51.         this->norm();
  52.         return *this;
  53.     }
  54.  
  55.     zFrac& operator -= (int a) {
  56.         zFrac temp(a);
  57.         *this -= temp;
  58.         return *this;
  59.     }
  60.  
  61.     zFrac operator - (zFrac const &r) const {
  62.         zFrac temp = *this;
  63.         temp -= r;
  64.         return temp;
  65.     }
  66.  
  67.     zFrac& operator *= (zFrac const &r) {
  68.         num *= r.num;
  69.         denom *= r.denom;
  70.         this->norm();
  71.         return *this;
  72.     }
  73.  
  74.     zFrac& operator *= (int const &a) {
  75.         this->num *= a;
  76.         this->norm();
  77.         return *this;
  78.     }
  79.  
  80.     zFrac operator * (zFrac const &r) const {
  81.         zFrac temp(*this);
  82.         temp *= r;
  83.         return temp;
  84.     }
  85.  
  86.  
  87.     zFrac& operator /= (zFrac const &r) {
  88.         (*this).num *= r.denom;
  89.         (*this).denom *= r.num;
  90.         this->norm();
  91.         return *this;
  92.     }
  93.  
  94.     zFrac& operator /= (int a) {
  95.         this->denom *= a;
  96.         this->norm();
  97.         return *this;
  98.     }
  99.  
  100.     zFrac operator / (zFrac const &r) const {
  101.         zFrac temp = *this;
  102.         temp /= r;
  103.         return temp;
  104.     }
  105.  
  106.     friend zFrac operator / (int const &a, zFrac const &r) {
  107.         zFrac temp1(r);
  108.         temp1.denom *= a;
  109.         temp1.norm();
  110.         return temp1;
  111.     }
  112.  
  113.     friend zFrac operator / (zFrac const &r, int const &a) {
  114.         zFrac temp1(r);
  115.         temp1.denom *= a;
  116.         temp1.norm();
  117.         return temp1;
  118.     }
  119.  
  120.      zFrac& operator = (int a) {
  121.         num = a, denom = 1;
  122.         return *this;
  123.     }
  124.  
  125.     bool operator < (zFrac const &r) const {
  126.         return num * r.denom < r.num * denom;
  127.     }
  128.  
  129.     bool operator <= (zFrac const &r) const {
  130.         return num * r.denom <= r.num * denom;
  131.     }
  132.  
  133.     bool operator > (zFrac const &r) const {
  134.         return num * r.denom > r.num * denom;
  135.     }
  136.  
  137.     bool operator >= (zFrac const &r) const {
  138.         return num * r.denom >= r.num * denom;
  139.     }
  140.  
  141.     bool operator == (zFrac const &r)const {
  142.         return num == r.num && denom == r.denom;
  143.     }
  144.  
  145.     bool operator != (zFrac const &r) const {
  146.         return !(r == *this);
  147.     }
  148.  
  149.     explicit operator double() {
  150.         return (double)num / denom;
  151.     }
  152.     //proxy класс
  153.  
  154.     friend ostream& operator << (ostream& os, zFrac const &r) {
  155.         if (r.denom != 1) os << r.num << "\\" << r.denom;
  156.         else os << r.num;
  157.         return os;
  158.     }
  159.  
  160.     friend istream& operator >> (istream& is, zFrac &r) {
  161.         char ch;
  162.         is >> r.num;
  163.         auto fl = is.flags();
  164.         is.unsetf(ios_base::skipws);
  165.         is >> ch;
  166.         if (ch == '/' || ch == '\\')
  167.             is >> r.denom;
  168.         else {
  169.             is.putback(ch);
  170.             r.denom = 1;
  171.         }
  172.         zFrac f;
  173.         is.setf(ios_base::skipws);
  174.         r.norm();
  175.         return is;
  176.     }
  177.  
  178.     int Num() const { return num; }
  179.     int Denom() const { return denom; }
  180.  
  181. private:
  182.     int num;
  183.     int denom;
  184. };
  185.  
  186. zFrac operator + (int const &a, zFrac const &r) {
  187.     zFrac temp1(a);
  188.     temp1 += r;
  189.     return temp1;
  190. }
  191.  
  192. zFrac operator + (zFrac const &r, int const &a) {
  193.     zFrac temp1(a);
  194.     temp1 += r;
  195.     return temp1;
  196. }
  197.  
  198. zFrac operator - (int const &a, zFrac const &r) {
  199.     zFrac temp1(a);
  200.     temp1 -= r;
  201.     return temp1;
  202. }
  203.  
  204. zFrac operator - (zFrac const &r, int const &a) {
  205.     zFrac temp1(a);
  206.     temp1 -= r;
  207.     return temp1;
  208. }
  209.  
  210. zFrac operator * (zFrac const &r, int const &a) {
  211.     zFrac temp1(a);
  212.     temp1 *= r;
  213.     return temp1;
  214. }
  215.  
  216. zFrac operator * (int const &a, zFrac const &r) {
  217.     zFrac temp1(a);
  218.     temp1 *= r;
  219.     return temp1;
  220. }
  221.  
  222. double const eps = 0.0000000001;
  223.  
  224. bool operator > (int const &a, zFrac r) {
  225.     return (double)a > (double)r;
  226. }
  227.  
  228. bool operator > (zFrac r, int const &a) {
  229.     return (double)r > (double)a;
  230. }
  231.  
  232. bool operator >= (int const &a, zFrac r) {
  233.     return (double)a > (double)r || abs((double)r - (double)a) < eps;
  234. }
  235.  
  236. bool operator >= (zFrac r, int const &a) {
  237.     return (double)r > (double)a || abs((double)r - (double)a) < eps;
  238. }
  239.  
  240. bool operator < (int const &a, zFrac r) {
  241.     return (double)a < (double)r;
  242. }
  243.  
  244. bool operator < (zFrac r, int const &a) {
  245.     return (double)r < (double)a;
  246. }
  247.  
  248. bool operator <= (int const &a, zFrac r) {
  249.     return (double)a < (double)r || abs((double)r - (double)a) < eps;
  250. }
  251.  
  252. bool operator <= (zFrac r, int const &a) {
  253.     return (double)r < (double)a || abs((double)r - (double)a) < eps;
  254. }
  255.  
  256. bool operator == (int const &a, zFrac r) {
  257.     return abs((double)r - (double)a) < eps;
  258. }
  259.  
  260. bool operator == (zFrac r, int const &a) {
  261.     return abs((double)r - (double)a) < eps;
  262. }
  263.  
  264. bool operator != (int const &a, zFrac r) {
  265.     return !(r == a);
  266. }
  267.  
  268. bool operator != (zFrac r, int const &a) {
  269.     return !(r == a);
  270. }
  271.  
  272. int main()
  273. {
  274.     zFrac r1(1, 2), r2(1, 3);
  275.  
  276.     r1 = r2;
  277.     while (true) {
  278.         zFrac a, b, c, d;
  279.         cin >> b >> c;
  280.         const int v = 1;
  281.         cin >> a >> d;
  282.         cout << (a < v) << (v < d) << (a <= v) << "\n";
  283.        
  284.     }
  285.    
  286.     return 0;
  287. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement