Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- namespace Numbers {
- struct Rational{
- int numerator;
- int denominator;
- Rational(int num=0, int den=1);
- };
- Rational add(Rational a, Rational b);
- Rational sub(Rational a, Rational b);
- Rational mul(Rational a, Rational b);
- Rational div(Rational a, Rational b);
- Rational reduce(Rational a);
- bool less(Rational a, Rational b);
- std::ostream & operator<<(std::ostream & s, Rational & r);
- }
- #include <iostream>
- #include "rational.h"
- using namespace std;
- namespace Numbers {
- // Inserire il codice che implementa le funzioni definite in "rational.h"
- Rational::Rational(int num,int den){
- if(num==0){
- if(den<=0){
- numerator=0;
- denominator=0;
- }
- else{
- numerator=0;
- denominator=1;//
- };
- }
- else{
- if(den==0){
- numerator=0;
- denominator=0;
- }
- else if(den<=0){
- numerator=num*(-1);
- denominator=den*(-1);
- }
- else if(den>0){
- numerator=num;
- denominator=den;
- }
- };
- };
- Rational add(Rational a, Rational b){
- int num=a.numerator*b.denominator+a.denominator*b.numerator;
- int den=a.denominator*b.denominator;
- if(den==0)
- return Rational(0,0);
- else
- return Rational(num,den);
- };
- Rational sub(Rational a, Rational b){
- int num=a.numerator*b.denominator-a.denominator*b.numerator;
- int den=a.denominator*b.denominator;
- if(den==0)
- return Rational(0,0);
- else
- return Rational(num,den);
- };
- Rational mul(Rational a, Rational b){
- int num=a.numerator*b.numerator;
- int den=a.denominator*b.denominator;
- if(den==0)
- return Rational(0,0);
- else
- return Rational(num,den);
- };
- Rational div(Rational a, Rational b){
- int num=a.numerator*b.denominator;
- int den=a.denominator*b.numerator;
- if(den==0)
- return Rational(0,0);
- else
- return Rational(num,den);
- };
- Rational reduce(Rational a){
- int num=a.numerator;
- int den=a.denominator;
- // if(num==0)
- // return Rational(0,den);
- // else{
- if(den>0){
- int i=2;
- while(i<10){
- if(num%i==0 && den%i==0){
- num=num/i;
- den=den/i;
- }
- else
- i++;
- }
- return Rational(num,den);
- }
- else
- return Rational(0,0);
- // }
- };
- std::ostream & operator<<(std::ostream & s, Rational & r){
- s<<r.numerator<<'/'<<r.denominator;
- return s;
- };
- bool less(Rational a, Rational b){ //if Rational a < Rational b
- bool chek=true;
- if(a.denominator==b.denominator){
- if(a.numerator<b.numerator)
- chek=true;
- else
- chek=false;
- }
- else if(a.numerator==b.numerator){
- if(a.denominator>b.denominator)
- chek=true;
- else
- chek=false;
- }
- else if(a.denominator!=b.denominator){
- int num1=a.numerator*b.denominator;
- int num2=b.numerator*a.denominator;
- if(num1<num2)
- chek=true;
- else
- chek=false;
- }
- return chek;
- };
- }
- #include "rational.h"
- using namespace std;
- using namespace Numbers;
- //
- int main()
- {
- int a,b;
- cin>>a>>b;
- Rational A(a,b);
- cout<<"start"<<endl;
- if((a==0 || b==0) || (a>b)){
- cout<<"Input non corretto";
- }
- else{
- bool chek=true;
- for(int i=2;chek==true;i++){
- // cout<<"TEST"<<endl;
- Rational B(1,i);
- if(Numbers::less(A,B)==false){ // less:: if A<B return true
- A=sub(A,B);
- cout<<B;
- if(A.numerator==0){}
- else
- cout<<" + ";
- if(A.numerator==0)
- chek=false;
- }
- }
- }
- cout<<endl;
- cout << "end" << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement