Калькулятор, выполняющий стандартные операции с дробями.
только на этот раз в класс введен метод сокращения дроби.

//------------------------------------------------------------------------------------------------
#include <iostream>
#include <conio.h>
#include <cmath>

using namespace std;
//-------------------------------------------------
class fraction
{
private:
int chisl;
int znam;
char ch;
public:
fraction(): ch('/')
{}
void set()
{
cout<<"\nEnter drob formata [3/4]: ";
cin>>chisl>>ch>>znam;
}
void oper(fraction d1, fraction d2)
{
char operation;
BIN:cout<<"\nEnter the symbol operetion [+,-,*,/]: ";
cin>>operation;
switch(operation)
{
case '+':
chisl = d1.chisl*d2.znam+d1.znam*d2.chisl;
znam = d1.znam*d2.znam;
break;
case '-':
chisl = (d1.chisl*d2.znam)-(d1.znam*d2.chisl);
znam = d1.znam*d2.znam;
break;
case '*':
chisl = d1.chisl*d2.chisl;
znam = d1.znam*d2.znam;
break;
case '/':
chisl = d1.chisl*d2.znam;
znam = d1.znam*d2.chisl;
break;
default: cout<<"\n I D I O T ! ! !\n";
goto BIN;
}
}
void display()const
{ cout<<"\nResult: "<<chisl<<ch<<znam<<endl; }
void sokr();
};
//--------------------------------------------------------------------------

void fraction::sokr()
{
int tchisl, tznam, temp, gcd;
tchisl = labs(chisl);
tznam = labs(znam);
if(tchisl==0)
{cout<<"Result: 0";getch(); exit(0);}
if(tznam==0)
{cout<<"Rong znamenatel!";getch(); exit(1);}
if(tchisl>tznam)
{temp=tchisl; tchisl=tznam; tznam=temp;}
for(int i=chisl; i>=2; i--)
{
if((chisl%i==0) && (znam%i==0))
{gcd=i;break;}
}
chisl=chisl/gcd;
znam=znam/gcd;
}
//----------------------------------------------------
int main()
{
fraction dr1, dr2, dr3;
dr1.set();
dr2.set();
dr3.oper(dr1,dr2);
dr3.display();
dr3.sokr();
dr3.display();
getch();
return 0;
}

//------------------------------------------------------------------------------------------------

Хакинг | Главная | Программирование

Hosted by uCoz