Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 3

Тема: Введення в об’єктно-орієнтоване програмування

Завдання Реалізуйте клас «Дріб». Необхідно зберігати чисельник


і знаменник як змінні-члени. Реалізуйте функції-члени для введення
даних в змінні-члени, для виконання арифметичних операцій
(додавання, віднімання, множення, ділення, і т.д.).
#include <iostream>
using namespace std;

class Drib {
private:
int numerator;
int denominator;
public:
void simplify();
int findGCD(int a, int b);
void input();
void print() const;
int findNsk(int a, int b);
void commonZnamenuk(Drib& p, Drib& d);
Drib Sum(const Drib& other) const;
Drib Min(const Drib& other) const;
Drib Multiply(const Drib& other) const;
Drib Divide(const Drib& other) const;
};

void Drib::simplify() {
int gcd = findGCD(numerator, denominator);
numerator /= gcd;
denominator /= gcd;
}

int Drib::findGCD(int a, int b) {


if (b == 0)
return a;
return findGCD(b, a % b);
}

void Drib::input() {
cout << "Enter numerator: ";
cin >> numerator;

cout << "Enter denominator: ";


cin >> denominator;

if (denominator == 0) {
cout << "Error: Denominator cannot be zero. Setting to default value." << std::endl;
denominator = 1;
}
}

void Drib::print() const {


cout << numerator;
if (denominator != 1) {
cout << '/' << denominator;
}
cout << std::endl;
}

int Drib::findNsk(int a, int b) {


int max = (a > b) ? a : b;

do {
if (max % a == 0 && max % b == 0) {
return max;
}
else {
++max;
}
} while (true);
}

void Drib::commonZnamenuk(Drib& p, Drib& d) {


int temp = findNsk(p.denominator, d.denominator);

p.numerator = p.numerator * temp / p.denominator;


p.denominator = temp;

d.numerator = d.numerator * temp / d.denominator;


d.denominator = temp;
}

Drib Drib::Sum(const Drib& other) const {


Drib result;
result.numerator = numerator * other.denominator + other.numerator * denominator;
result.denominator = denominator * other.denominator;
result.simplify();
return result;
}

Drib Drib::Min(const Drib& other) const {


Drib result;
result.numerator = numerator * other.denominator - other.numerator * denominator;
result.denominator = denominator * other.denominator;
result.simplify();
return result;
}

Drib Drib::Multiply(const Drib& other) const {


Drib result;
result.numerator = numerator * other.numerator;
result.denominator = denominator * other.denominator;
result.simplify();
return result;
}

Drib Drib::Divide(const Drib& other) const {


Drib result;
result.numerator = numerator * other.denominator;
result.denominator = denominator * other.numerator;
result.simplify();
return result;
}

int main()
{
Drib fraction1, fraction2, result;

cout << "Enter fraction 1:" << endl;


fraction1.input();

cout << endl << "Enter fraction 2: " << endl;


fraction2.input();

result = fraction1.Sum(fraction2);
cout << endl << "Sum: ";
result.print();

result = fraction1.Min(fraction2);
cout << "Subtraction: ";
result.print();

result = fraction1.Multiply(fraction2);
cout << "Multiplication: ";
result.print();

result = fraction1.Divide(fraction2);
cout << "Division: ";
result.print();
}

You might also like