Advertisement
Infernale

2nd SEMESTER HW4 NUM 1

Apr 2nd, 2019
552
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.81 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5. using namespace std;
  6.  
  7. class Fraction{
  8.     int numer, denom;
  9.     int find_gcd(int a, int b){
  10.         return a==0?b:find_gcd(b%a, a);
  11.     }
  12.     public:
  13.         void setNum(int num){
  14.             numer = num;
  15.         }
  16.         void setDen(int num){
  17.             denom = num;
  18.         }
  19.         int getNum(){
  20.             return numer;
  21.         }
  22.         int getDen(){
  23.             return denom;
  24.         }
  25.         Fraction operator +(const Fraction& fr){
  26.             Fraction f;
  27.             if(this->denom!=fr.denom){
  28.                 f.setDen(this->denom*fr.denom);
  29.                 f.setNum(this->numer*fr.denom + this->denom*fr.numer);
  30.             }else{
  31.                 f.setDen(this->denom);
  32.                 f.setNum(this->numer+fr.numer);
  33.             }
  34.             f.reduce_fraction();
  35.             return f;
  36.         }
  37.         Fraction operator -(const Fraction& fr){
  38.             Fraction f;
  39.             if(this->denom!=fr.denom){
  40.                 f.setDen(this->denom*fr.denom);
  41.                 f.setNum(this->numer*fr.denom - this->denom*fr.numer);
  42.             }else{
  43.                 f.setDen(this->denom);
  44.                 f.setNum(this->numer-fr.numer);
  45.             }
  46.             f.reduce_fraction();
  47.             return f;
  48.         }
  49.         Fraction operator *(const Fraction& fr){
  50.             Fraction f;
  51.             f.setNum(this->numer*fr.numer);
  52.             f.setDen(this->denom*fr.denom);
  53.             f.reduce_fraction();
  54.             return f;
  55.         }
  56.         Fraction operator /(const Fraction& fr){
  57.             Fraction f;
  58.             f.setNum(this->numer*fr.denom);
  59.             f.setDen(this->denom*fr.numer);
  60.             f.reduce_fraction();
  61.             return f;
  62.         }
  63.         Fraction operator %(const Fraction& fr){
  64.             Fraction f;
  65.             if(this->denom!=fr.denom){
  66.                 f.setDen(this->denom*fr.denom);
  67.                 f.setNum(this->numer*fr.denom % this->denom*fr.numer);
  68.             }else{
  69.                 f.setDen(this->denom);
  70.                 f.setNum(this->numer%fr.numer);
  71.             }
  72.             f.reduce_fraction();
  73.             return f;  
  74.         }
  75.         void power(int power){
  76.             this->numer = pow(this->numer,power);
  77.             this->denom = pow(this->denom,power);
  78.             this->reduce_fraction();
  79.         }
  80.         void reduce_fraction(){
  81.             int gcd = find_gcd(numer, denom);
  82.             this->numer/=gcd;
  83.             this->denom/=gcd;
  84.         }
  85.         void print_fraction(){
  86.             if(numer==denom){
  87.                 cout << numer << endl;
  88.             }else{
  89.                 cout << numer << "/" << denom << endl;
  90.             }
  91.         }
  92. };
  93.  
  94. void printMenu(){
  95.     system("cls");
  96.     cout << "1. Addition (+)" << endl;
  97.     cout << "2. Substraction (-)" << endl;
  98.     cout << "3. Multiplication (*)" << endl;
  99.     cout << "4. Division (/)" << endl;
  100.     cout << "5. Modulo (%)" << endl;
  101.     cout << "6. Fraction to the power n" << endl;
  102.     cout << "7. Exit" << endl;
  103.     cout << "Enter the operation: " << endl;
  104. }
  105.  
  106. void getFraction(Fraction& first, Fraction& second){
  107.     int temp;
  108.     cout << "Enter first fraction numerator and denominator" << endl;
  109.     cin >> temp; first.setNum(temp);
  110.     cin >> temp; first.setDen(temp);
  111.     cout << "Enter the second fraction numerator and denominator" << endl;
  112.     cin >> temp; second.setNum(temp);
  113.     cin >> temp; second.setDen(temp);  
  114. }
  115.  
  116. int main(){
  117.     Fraction first, second, result;
  118.     int input, temp, p;
  119.     do{
  120.         printMenu();
  121.         cin >> input;
  122.         switch(input){
  123.             case 1:
  124.                 getFraction(first, second);
  125.                 result = first+second;
  126.                 break;
  127.             case 2:
  128.                 getFraction(first, second);
  129.                 result = first-second;
  130.                 break;
  131.             case 3:
  132.                 getFraction(first, second);
  133.                 result = first*second;
  134.                 break;
  135.             case 4:
  136.                 getFraction(first, second);
  137.                 result = first/second;
  138.                 break;
  139.             case 5:
  140.                 getFraction(first, second);
  141.                 result = first%second;
  142.                 break;
  143.             case 6:
  144.                 cout << "Enter fraction numerator and denominator" << endl;
  145.                 cin >> temp; result.setNum(temp);
  146.                 cin >> temp; result.setDen(temp);
  147.                 cout << "Enter the power (integer): ";
  148.                 cin >> p;
  149.                 result.power(p);
  150.                 break;
  151.             case 7:
  152.                 cout << "Exiting...";
  153.                 exit(0);
  154.                 break;
  155.             default:
  156.                 cout << "Only 1 - 6 allowed! Restarting..." << endl;
  157.                 sleep(1);
  158.                 continue;
  159.         }
  160.         cout << "Result : ";
  161.         result.print_fraction();
  162.         cout << endl;
  163.         system("pause");
  164.     }while(true);
  165.     return 0;
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement