csansoon

P9.04 P26141 Rational numbers (4)

Dec 5th, 2018
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.03 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct Rational {
  5.          int num, den;
  6.      };
  7.    
  8. int gcd (int n, int d) {
  9.     int r = 0;
  10.     if(d == 0)
  11.         return n;
  12.     else {
  13.         r = gcd(d, n%d);
  14.     }
  15.     return r;
  16. }
  17.  
  18. void add (Rational& number) {
  19.   Rational number2;
  20.   cin >> number2.num >> number2.den;
  21.   Rational result;
  22.   result.num = (number.num * number2.den)+ ( number2.num * number.den);
  23.   result.den = number.den * number2.den;
  24.    
  25.   number = result;
  26. }
  27.  
  28. void substract (Rational& number) {
  29.   Rational number2;
  30.   cin >> number2.num >> number2.den;
  31.   Rational result;
  32.   result.num = (number.num * number2.den) - ( number2.num * number.den);
  33.   result.den = number.den * number2.den;
  34.    
  35.   number = result;
  36. }
  37.  
  38. void multiply (Rational& number) {
  39.   Rational number2;
  40.   cin >> number2.num >> number2.den;
  41.   Rational result;
  42.   result.num = number.num * number2.num;
  43.   result.den = number.den * number2.den;
  44.  
  45.   number = result;
  46. }
  47.  
  48. void divide (Rational& number) {
  49.   Rational number2;
  50.   cin >> number2.num >> number2.den;
  51.   Rational result;
  52.   result.num = number.num * number2.den;
  53.   result.den = number.den * number2.num;
  54.  
  55.   number = result;
  56. }
  57.  
  58.  
  59.  
  60. void simplify(Rational& number) {
  61.     Rational res;
  62.   res.num=number.num/gcd(number.num,number.den);
  63.   res.den=number.den/gcd(number.num,number.den);
  64.   if (res.den<0) {
  65.     res.den=res.den*(-1);
  66.     res.num=res.num*(-1);
  67.   }
  68.   number=res;
  69. }
  70.  
  71. void print(Rational& number) {
  72.   if (number.num%number.den==0) cout<<number.num/number.den<<endl;
  73.   else cout<<number.num<<"/"<<number.den<<endl;
  74. }
  75.  
  76.    
  77. int main() {
  78.     Rational number;
  79.     cin>>number.num>>number.den;
  80.     simplify(number);
  81.     print(number);
  82.     string s;
  83.     while (cin>>s) {
  84.       if        (s=="add") add(number);
  85.       else if   (s=="substract") substract(number);
  86.       else if   (s=="multiply") multiply(number);
  87.       else if   (s=="divide") divide(number);
  88.       simplify(number);
  89.       print(number);
  90.     }
  91.    
  92. }
  93.  
  94. // (c) Carlos Sansón (Best pro1 delegate ever for sure) @csansoon
Advertisement
Add Comment
Please, Sign In to add comment