Text: |
ФІО = Горбаченко В.А.
Запитання:/*
Визначити клас дріб. (Чисельник і знаменник цілі числа). Реалізувати операції додавання,
віднімання, множення і ділення дробів і порівняння ций дробів.
Перегрузка дробов.
*/
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
class TDrob{ // клас дроб
public:
int c,z; // чисельник і знаменник
void Skorotutu(){ // метод скорочує дріб
int max=0, // максимальне число
i=2; // лічильник починається з двійки
if (z>c) {max=z;} else {max=c;}// визначаємо максимальне число
while (i<=max){ // цикл до тих пір поки i буде менше max
if ( z % i == 0 && c % i == 0 ){// якщо чисельник і знаменник дільться націло, то
z/=i;
c/=i;
i=2; // зкидуємо, для перестраховки ))
}
i++;
}
}
void Print(){ // метод виводить дріб на екран
Skorotutu();
if (c==z){ // якщо чисельник і знаменний дорівнюють, то явно що тут одиниця
cout<<" PRINT -> 1"<<endl;
return ;
}
if (c==0){ // якщо Чисельник == 0 то якно тут 0
cout<<" PRINT -> 0"<<endl;
return ;
}
cout<<" PRINT -> "<<c<<" / "<<z<<endl; // інакше виводимо те що є
return ;
}
void Enter(){ // метод зчитує дроб
cout<<" DROB ENTER\n";
cout<<" Enter 4uselnuk : ";
cin>>c;
cout<<" Enter ZNAMENNUK : ";
cin>>z;
Skorotutu();
}
TDrob TDrob::operator + (TDrob b){ // перевантаження оператора +
TDrob temp; // створюємо допоміжну змінну
if (z==b.z) // якщо знаменник першого операнда == знаменнику другого операнда,
{// то виконуємо таке
temp.c=c+b.c;
temp.z=z;
}
else
{// інакше ...
temp.z=z*b.z;
temp.c=c*b.z+b.c*z;
}
temp.Skorotutu();
return temp; // повертаємо результат додаванна
}
bool TDrob::operator == (TDrob b){ // перевантаження порівнання
// повертає true чи false
Skorotutu();
b.Skorotutu();
if ( z==b.z && c==b.c) return true;
else return false;
}
TDrob TDrob::operator - (TDrob b){ // перевантаження оператора -
TDrob temp; // аналогічно до попереднього
if (z==b.z)
{// якщо знаменники рівні, то віднімаємо тільки знаменники
temp.c=c-b.c;
temp.z=z;
}
else
{// інакше по правилу віднімання
temp.z=z*b.z;
temp.c=c*b.z-b.c*z;
}
temp.Skorotutu();
return temp;
}
TDrob TDrob::operator * (TDrob b){// перевантаження оператиора *
TDrob temp;
temp.c = c*b.c;
temp.z = z*b.z;
temp.Skorotutu();
return temp;
}
TDrob TDrob::operator / (TDrob b){ // перевантаження оператора /
TDrob temp;
temp.c = c*b.z;
temp.z = z*b.c;
temp.Skorotutu();
return temp;
}
};
int main(){
TDrob a,b,c; // створюємо змінні а, б та це тибу ДРОБ
/// зчитуємо з клавіатури наші дроби (методи в класі ТДРОБ)
a.Enter();
b.Enter();
//виводимо на екран зчитані дані
a.Print();
b.Print();
cout<<endl;
// без коментарыв...
c=a+b;
cout<<"plus = ";
c.Print();// виводимо результат....
// далі аналогічно...
c=a-b;
cout<<"minus = ";
c.Print();
c=a*b;
cout<<"mnoj = ";
c.Print();
c=a/b;
cout<<"div = ";
c.Print();
if (a==b) {cout<<" A == B \n";} else {cout<<" A != B \n";}
system("pause");
return 0;
}
====================================
|