Advertisement
FrancescoBari

es10.4

Jan 17th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.32 KB | None | 0 0
  1. #include<iostream>
  2.  
  3. namespace Numbers {
  4.    
  5.     struct Rational{
  6.         int numerator;
  7.         int denominator;
  8.        
  9.         Rational(int num=0, int den=1);
  10.     };
  11.  
  12.     Rational add(Rational a, Rational b);
  13.  
  14.     Rational sub(Rational a, Rational b);
  15.  
  16.     Rational mul(Rational a, Rational b);
  17.  
  18.     Rational div(Rational a, Rational b);
  19.  
  20.     Rational reduce(Rational a);
  21.    
  22.     bool less(Rational a, Rational b);
  23.  
  24.     std::ostream & operator<<(std::ostream & s, Rational & r);
  25. }
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44. #include <iostream>
  45. #include "rational.h"
  46.  
  47. using namespace std;
  48.  
  49. namespace Numbers {
  50.     // Inserire il codice che implementa le funzioni definite in "rational.h"  
  51.      
  52.     Rational::Rational(int num,int den){
  53.         if(num==0){
  54.             if(den<=0){
  55.                 numerator=0;
  56.                 denominator=0;
  57.             }
  58.             else{
  59.             numerator=0;
  60.             denominator=1;//
  61.          };
  62.         }
  63.         else{
  64.         if(den==0){
  65.             numerator=0;
  66.             denominator=0;
  67.         }
  68.         else if(den<=0){
  69.         numerator=num*(-1);
  70.         denominator=den*(-1);
  71.         }
  72.         else if(den>0){
  73.             numerator=num;
  74.             denominator=den;
  75.         }
  76.       };
  77.     };
  78.    
  79.     Rational add(Rational a, Rational b){
  80.         int num=a.numerator*b.denominator+a.denominator*b.numerator;
  81.         int den=a.denominator*b.denominator;
  82.         if(den==0)
  83.         return Rational(0,0);
  84.         else
  85.         return Rational(num,den);
  86.     };
  87.    
  88.     Rational sub(Rational a, Rational b){
  89.         int num=a.numerator*b.denominator-a.denominator*b.numerator;
  90.         int den=a.denominator*b.denominator;
  91.         if(den==0)
  92.         return Rational(0,0);
  93.         else
  94.         return Rational(num,den);
  95.     };
  96.    
  97.     Rational mul(Rational a, Rational b){
  98.         int num=a.numerator*b.numerator;
  99.         int den=a.denominator*b.denominator;
  100.         if(den==0)
  101.         return Rational(0,0);
  102.         else
  103.         return Rational(num,den);
  104.     };
  105.    
  106.     Rational div(Rational a, Rational b){
  107.         int num=a.numerator*b.denominator;
  108.         int den=a.denominator*b.numerator;
  109.         if(den==0)
  110.         return Rational(0,0);
  111.         else
  112.         return Rational(num,den);
  113.     };
  114.    
  115.      Rational reduce(Rational a){
  116.    int num=a.numerator;
  117.    int den=a.denominator;
  118.    
  119.  //  if(num==0)
  120.  //  return Rational(0,den);
  121.   // else{
  122.    if(den>0){
  123.    int i=2;
  124.    while(i<10){
  125.        if(num%i==0 && den%i==0){
  126.            num=num/i;
  127.            den=den/i;
  128.        }
  129.        else
  130.        i++;
  131.    }
  132.    
  133.     return Rational(num,den);
  134.     }
  135.     else
  136.     return Rational(0,0);
  137.   //   }
  138.    
  139.     };
  140.    
  141.     std::ostream & operator<<(std::ostream & s, Rational & r){
  142.         s<<r.numerator<<'/'<<r.denominator;
  143.        
  144.         return s;
  145.        
  146.     };
  147.    
  148.     bool less(Rational a, Rational b){ //if   Rational a < Rational b
  149.        bool chek=true;
  150.         if(a.denominator==b.denominator){
  151.             if(a.numerator<b.numerator)
  152.             chek=true;
  153.             else
  154.             chek=false;
  155.         }
  156.        
  157.         else if(a.numerator==b.numerator){
  158.             if(a.denominator>b.denominator)
  159.             chek=true;
  160.             else
  161.             chek=false;
  162.         }
  163.        
  164.         else if(a.denominator!=b.denominator){
  165.          int num1=a.numerator*b.denominator;
  166.          int num2=b.numerator*a.denominator;
  167.          if(num1<num2)
  168.          chek=true;
  169.          else
  170.          chek=false;
  171.            
  172.         }
  173.         return chek;
  174.     };
  175. }
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197. #include "rational.h"
  198.  
  199.  
  200. using namespace std;
  201. using namespace Numbers;
  202. //
  203. int main()
  204. {
  205.     int a,b;
  206.     cin>>a>>b;
  207.    
  208.     Rational A(a,b);
  209.    
  210.     cout<<"start"<<endl;
  211.  
  212. if((a==0  || b==0) || (a>b)){
  213.     cout<<"Input non corretto";
  214. }
  215. else{
  216.    
  217.     bool chek=true;
  218.    
  219.     for(int i=2;chek==true;i++){
  220.    // cout<<"TEST"<<endl;
  221.    
  222.     Rational B(1,i);
  223.     if(Numbers::less(A,B)==false){ //  less:: if A<B  return true
  224.         A=sub(A,B);
  225.         cout<<B;
  226.         if(A.numerator==0){}
  227.         else
  228.         cout<<" + ";
  229.        
  230.        
  231.         if(A.numerator==0)
  232.         chek=false;
  233.     }
  234.    
  235.    
  236.    
  237.     }
  238.    
  239. }    
  240.  
  241.  
  242.  
  243.     cout<<endl;
  244.     cout << "end" << endl;
  245.    
  246. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement