#include <iostream>
#include <math.h>
#include "cstdlib"
using namespace std;
int NOD(int x, int y)
{
if (y == 0) return x;
return NOD(y, x % y);
}
class rational_number
{
int num, dn; //числитель (numerator) и знаменатель (denominator)
public:
rational_number()//конструктор
{
cout << "Отработал конструктор\n";
};
void init()
{
cout << "Введите числитель:\n";
cin >> num;
cout << "Введите знаменатель:\n";
cin >> dn;
}
~rational_number()//деструктор
{
cout << "Отработал деструктор\n";
}
rational_number(rational_number &a) //конструктор копирования
{
num=a.num;
dn=a.dn;
}
void reduction()
{
int n=NOD(num,dn);
cout <<num<< '/' <<dn<< " => " <<(num/n)<<'/' << (dn/n)<<endl;
}
friend double operator ^ (double x,rational_number &n);
friend int operator >=(rational_number &n, rational_number &d);
friend int operator <=(rational_number &n, rational_number &d);
friend int operator >(int x, rational_number &n);
int operator >(int x);
friend int operator <(int x, rational_number &n);
int operator <(int x);
};
double operator ^ (double x,rational_number &n)
{ float p;
p=(n.num/n.dn);
return pow(x,p);
}
int operator >=(rational_number &n, rational_number &d)
{
n.reduction();
d.reduction();
if (n.num*d.dn>d.num*n.dn)
return 0;
else
if (n.num*d.dn==d.num*n.dn)
return -1;
else return 1;
}
int operator <=(rational_number &n, rational_number &d)
{ n.reduction();
d.reduction();
if (n.num*d.dn<d.num*n.dn)
return 0;
else
if (n.num*d.dn==d.num*n.dn)
return -1;
else return 1;
}
int operator >(int x, rational_number &n)
{ n.reduction();
if (x*n.dn>n.num)
return 0;
else
if (x*n.dn==n.num)
return -1;
else return 1;
}
int rational_number::operator >(int x)
{ reduction(); /*как в таких функциях */
if (num>x*dn)
return 0;
else
if (num==x*dn)
return -1;
else return 1;
}
int operator <(int x, rational_number &n)
{ n.reduction();
if (x*n.dn<n.num)
return 0;
else
if (x*n.dn==n.num)
return -1;
else return 1;
}
int rational_number::operator <(int x)
{ reduction();
if (num<x*dn)
return 0;
else
if (num==x*dn)
return -1;
else return 1;
}
int main()
{
setlocale(LC_ALL, "Russian");
char sw;
int cnumber;
double number;
rational_number first;
rational_number second;
int run=1;
while(run)
{
system("cls");
cout<<"1.Возведение вещественного числа в степень,заданную рациональным числом\n2.Сравнение двух рациональных чисел >= " << endl
<< "3.Сравнение двух рациональных чисел <= \n4.Сравнение целого числа с рациональным числом >= \n5.Сравнение рационального числа с целым числом >= "<< endl
<< "6.Сравнение целого числа с рациональным числом <= \n7.Сравнение рационального числа с целым числом <= \n8.Выход\n";
cin >> sw;
switch(sw)
{
case '1': //ЖЕЕЕЕЕЕЕНЬ, почему он не работает :СССС
first.init();
cout<<"Введите вещественное число:";
cin>>number;
cout<<"Результат:"<< (number^first);
system("PAUSE");
break;
case '2':
first.init();
second.init();
//first.reduction();
//second.reduction();
switch(first>=second)
{
case 0:cout<<"Первое рациональное число > второго рационального числа";break;
case 1:cout<<"Первое рациональное число < второго рационального числа";break;
case -1:cout<<"Первое рациональное число = второму рациональному числу";break;
};
system("PAUSE");
break;
case '3':
first.init();
second.init();
//first.reduction();
//second.reduction();
switch(first<=second)
{
case 0:cout<<"Первое рациональное число < второго рационального числа";break;
case 1:cout<<"Первое рациональное число > второго рационального числа";break;
case -1:cout<<"Первое рациональное число = второму рациональному числу";break;
};
system("PAUSE");
break;
case '4':
cout<<"Введите целое число:\n";
cin>>cnumber;
first.init();
switch(cnumber>first)
{
case 0:cout<<"Целое число > рационального числа";break;
case 1:cout<<"Целое число < рационального числа";break;
case -1:cout<<"Целое число = рациональному числу";break;
}
system("PAUSE");
break;
case '5':
first.init();
cin>>cnumber;
switch(first>cnumber)
{
case 0:cout<<"Рациональное число > целого числа";break;
case 1:cout<<"Рациональное число < целого числа";break;
case -1:cout<<"Рациональное число = целому числу";break;
}
system("PAUSE");
break;
case '6':
cout<<"Введите целове число:\n";
cin>>cnumber;
first.init();
switch(cnumber<first)
{
case 0:cout<<"Целое число < рационального числа";break;
case 1:cout<<"Целое число > рационального числа";break;
case -1:cout<<"Целое число = рациональному числу";break;
}
system("PAUSE");
break;
case '7':
first.init();
cout<<"Введите целове число:\n";
cin>>cnumber;
switch(first<cnumber)
{
case 0:cout<<"Рациональное число < целого числа";break;
case 1:cout<<"Рациональное число > целого числа";break;
case -1:cout<<"Рациональное число = целому числу";break;
}
system("PAUSE");
break;
case '8':run=0;
break;
}
}
return 0;
}