Но я не уверена
Решение
C++Выделить код
#include "StdAfx. h"
#include <iostream>
#include <math. h>
#include <conio. h>
#include <stdio. h>
#include <windows. h>
using namespace std;
int gcd(int a, int b){
a = abs(a), b = abs(b);
if (b == 0)return a;
else return gcd(b, a%b);
}
void sokrdrob(int a, int b){
int x = gcd(a, b);
a /= x;
b /= x;
cout << a << " " << b;
}
class Rat
{
public: //общедоступные элементы
int x, y;
Rat() {}; // Конструктор по умолчанию
Rat(int x1, int y1=1): x(x1), y(y1) //конструктор
{
//if(y==0) y=1;
//if(y<0) {x=-x; y=-y;}
int sign = 1;
if (y==0) {printf("Некорректный параметр");
x = 0; y = 0; return;}
if (x==0) {x=0; y=1; return;}
else if (y<0) sign = sign;
if (x<0) sign = sign;
int a=abs(x), b=abs(y);
//x=sign*x; y=y;
while (a!=b){if (a>b) a-=b;
else b-=a;}
x/=a; y/=a;
x=sign*x;
}
~Rat() {} // Деструктор
Rat operator= (Rat r){Rat q(r. x, r. y); return q;}
friend Rat operator+(Rat, Rat); //перегрузка операции +
friend Rat operator-(Rat, Rat); //перегрузка операции -
friend Rat operator*(Rat, Rat); //перегрузка операции *
// Перегрузка оператора << для вывода в десятичной форме
friend ostream &operator<<(ostream &, Rat &);
};
// Перегрузка оператора << для вывода в десятичной форме
ostream &operator<<(ostream &v, Rat &w)
{
Rat q(w. x, w. y);
v << q. x<< "/" <<q. y;
return v;
}
Rat operator+(Rat v, Rat w) //перегрузим операцию сложения
{
v. x=v. x*w. y+w. x*v. y; //формируем числитель дроби
v. y=v. y*w. y; //формируем знаменатель дроби
Rat p(v. x,v. y);
return p;
}
Rat operator-(Rat v, Rat w) //перегрузим операцию вычитания
{
v. x=v. x*w. y-w. x*v. y; //числитель дроби
v. y=v. y*w. y; //знаменатель дроби
Rat p(v. x,v. y);
return p;
}
Rat operator*(Rat v, Rat w) //перегрузим операцию умножения
{
v. x=v. x*w. x;
v. y=v. y*w. y;
Rat p(v. x,v. y);
return p;
}
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
system("cls");
/*Rat p(2,4);
printf("p=(%d,%d)",p. x, p. y);*/
printf("Класс рациональных несократимых дробейn");
Rat v(1),w(1);
printf ("nВходные данные:nv = ");
scanf("%d/%d",&v. x, &v. y);
printf("w = ");
scanf("%d/%d",&w. x,&w. y);
//Проверка на несократимость
if(v. x%v. y!=0 && w. x%w. y!=0)
{
Rat t=v+w;
printf("nРезультат сложения v+w= ",t. x, t. y);
cout<<t;
Rat t1=v-w;
printf("nРезультат вычитания v-w= ",t1. x, t1. y);
cout<<t1;
Rat t2=v*w;
printf("nРезультат умножения v*w== ",t2. x, t2. y);
cout<<t2;
if(v. x<0) v. x*=-1;
if(v. y<0) v. y*=-1;
printf("nМодуль рационального числа аbs(v)= {%f}",(double)v. x / v. y); //модуль
}
else printf("nОшибка при вводе рационального числа");
getch();
}