else if(f1.znak == true && f2.znak == true)
return TFrac(-(f1.chislitel + f2.chislitel), f1.znamenatel);
else if(f1.znak == false && f2.znak == true)
if(f1.chislitel < f2.chislitel)
return TFrac(-(f1.chislitel - f2.chislitel),f2.znamenatel);
else return TFrac(f1.chislitel - f2.chislitel, f1.znamenatel);
else
//f1.znak == true && f2.znak == false
if(f1.chislitel < f2.chislitel)
return TFrac(f1.chislitel - f2.chislitel, f1.znamenatel);
else return TFrac(-(f1.chislitel - f2.chislitel), f1.znamenatel);
}
//Иначе
else
{
//Приводим дроби к общему знаменателю и проводим выше описанныедействия
if(f1.znak == false && f2.znak == false)
return TFrac((f1.chislitel * f2.znamenatel) + (f2.chislitel * f1.znamenatel), (f1.znamenatel * f2.znamenatel));
else if(f1.znak == true && f2.znak == true)
return TFrac(-((f1.chislitel * f2.znamenatel) + (f2.chislitel * f1.znamenatel)), (f1.znamenatel * f2.znamenatel));
else if(f1.znak == false && f2.znak == true)
if((f1.chislitel * f2.znamenatel) < (f2.chislitel * f1.znamenatel))
return TFrac(-((f1.chislitel * f2.znamenatel) - (f2.chislitel * f1.znamenatel)), f1.znamenatel * f2.znamenatel);
else return TFrac((f1.chislitel * f2.znamenatel) - (f2.chislitel * f1.znamenatel), f1.znamenatel * f2.znamenatel);
else
//f1.znak == true && f2.znak == false
if((f1.chislitel * f2.znamenatel) < (f2.chislitel * f1.znamenatel))
return TFrac(-((f1.chislitel * f2.znamenatel) - (f2.chislitel * f1.znamenatel)), f1.znamenatel * f2.znamenatel);
else return TFrac((f1.chislitel * f2.znamenatel) - (f2.chislitel * f1.znamenatel), f1.znamenatel * f2.znamenatel);
}
}
//Перегрузка оператора умножения
TFrac operator *(const TFrac &f1, const TFrac &f2)
{
if((f1.znak == true && f2.znak == true) || (f1.znak == false && f2.znak == false))
return TFrac(f1.chislitel * f2.chislitel, f1.znamenatel * f2.znamenatel);
else return TFrac(-(f1.chislitel * f2.chislitel), f1.znamenatel * f2.znamenatel);
}
//Перегрузка оператора вычитания
TFrac operator -(const TFrac &f1, const TFrac &f2)
{
//Если знаменатели дробей равны
if(f1.znamenatel == f2.znamenatel)
{
//Обе дроби положительные
if(f1.znak == false && f2.znak == false)
return TFrac(f1.chislitel - f2.chislitel, f1.znamenatel);
//Вторая дробь отрицательная
else if(f1.znak == false && f2.znak == true)
return TFrac(f1.chislitel + f2.chislitel, f1.znamenatel);
//Первая дробь отрицательная
else if(f1.znak == true && f2.znak == false)
return TFrac(f1.chislitel + f2.chislitel, f1.znamenatel);
//Обе дроби отрицательные
else
return TFrac(-(f1.chislitel - f2.chislitel), f1.znamenatel);
}
//Иначе
else
{
//Обе дроби положительные
if(f1.znak == false && f2.znak == false)
return TFrac((f1.chislitel * f2.znamenatel) - (f2.chislitel * f1.znamenatel), f1.znamenatel * f2.znamenatel);
//Вторая дробь отрицательная
else if(f1.znak == false && f2.znak == true)
return TFrac((f1.chislitel * f2.znamenatel) + (f2.chislitel * f1.znamenatel), f1.znamenatel * f2.znamenatel);
//Первая дробь отрицательная
else if(f1.znak == true && f2.znak == false)
return TFrac(-((f1.chislitel * f2.znamenatel) + (f2.chislitel * f1.znamenatel)), f1.znamenatel * f2.znamenatel);
//Обе дроби отрицательные
else return TFrac(-((f1.chislitel * f2.znamenatel) - (f2.chislitel * f1.znamenatel)), f1.znamenatel * f2.znamenatel);
}
}
//Перегрузка оператора деления
TFrac operator /(const TFrac &f1, const TFrac &f2)
{
if((f1.znak == true && f2.znak == false) || (f1.znak == false && f2.znak == true))
return TFrac(-(f1.chislitel * f2.znamenatel), f1.znamenatel * f2.chislitel);
else
{
if(f1.znak == true)
return TFrac((f1.chislitel * f2.znamenatel),(f1.znamenatel * f2.chislitel));
else return TFrac(-(f1.chislitel * f2.znamenatel),(f1.znamenatel * f2.chislitel));
}
}
//Возведения в квадрат
TFrac TFrac::Square()
{
return TFrac((this->chislitel * this->chislitel), (this->znamenatel * this->znamenatel));
}
//Возвращает дробь обратную данной
TFrac TFrac::Inverse()
{
if(this->znak == true)
return TFrac(-(this->znamenatel), this->chislitel);
else return TFrac(this->znamenatel, this->chislitel);
}
//Меняет знак дроби
TFrac TFrac::Minus()
{
if(this->znak == true)
return TFrac(this->chislitel, this->znamenatel);
else return TFrac(-(this->chislitel), this->znamenatel);
}
//Перегрузка оператора сравнения
bool operator ==(const TFrac &f1, const TFrac &f2)
{
if((f1.znak == f2.znak) & (f1.chislitel == f2.chislitel) & (f1.znamenatel == f2.znamenatel))
return true;
else return false;
}
//Перегрузка оператора "Больше"
bool operator >(const TFrac &f1, const TFrac &f2)
{
//Обе дроби положительные
if(f1.znak == false && f2.znak == false)
{
//Если знаменатели равны
if(f1.znamenatel == f2.znamenatel)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.