You are on page 1of 4

#include <iostream>

#include <algorithm>

using namespace std;

class PhanSo {
private:
int TuSo; // Tử số
int MauSo; // Mẫu số
public:
// Hàm khởi tạo
PhanSo(int tu, int mau) : TuSo(tu), MauSo(mau) {}
PhanSo() {}

int getTu() const { return TuSo; }


int getMau() const { return MauSo; }

// Hàm tính tổng hai phân số


PhanSo operator+(const PhanSo& other) {
int newTuSo = TuSo * other.MauSo + other.TuSo * MauSo;
int newMauSo = MauSo * other.MauSo;
return RutGon(PhanSo(newTuSo, newMauSo));
}

// Hàm rút gọn phân số


PhanSo RutGon(const PhanSo& ps) {
int gcd = UCLN(ps.TuSo, ps.MauSo);
return PhanSo(ps.TuSo / gcd, ps.MauSo / gcd);
}

// Hàm tìm ước chung lớn nhất


int UCLN(int a, int b) {
if (b == 0) return a;
return UCLN(b, a % b);
}

// Input
friend istream& operator>>(istream& is, PhanSo& other) {
cout << "Nhap tu so : ";
is >> other.TuSo;
cout << "Nhap mau so : ";
is >> other.MauSo;
return is;
}

// Output
friend ostream& operator<<(ostream& os, const PhanSo& other) {
os << other.TuSo << " / " << other.MauSo << endl;
return os;
}

// So sánh 2 phân số
bool operator<(const PhanSo& other) const {
return TuSo * other.MauSo < MauSo * other.TuSo;
}

bool operator>(const PhanSo& other) const {


return TuSo * other.MauSo > MauSo * other.TuSo;
}
};

class DSPhanSo {
private:
PhanSo* phanso;
int capacity;
int size;

public:
DSPhanSo(int cap) : capacity(cap), size(0) {
phanso = new PhanSo[capacity];
}

// Hủy bỏ bộ nhớ
~DSPhanSo() {
delete[] phanso;
}

// Lay so luong phan tu


int getCapacity() { return capacity; }

// Nhập danh sách phan số


void NhapPhanSo() {
for (int i = 0; i < capacity; ++i) {
cout << "Nhap phan so thu " << i + 1 << " : \n";
cin >> phanso[i];
}
}

// Xuất danh sách phân số


void XuatPhanSo() {
for (int i = 0; i < capacity; ++i) {
cout << phanso[i];
}
}

// Tính tổng các phân số


PhanSo tinhTong() const {
PhanSo sum(0, 1);
for (int i = 0; i < size; ++i) {
sum = sum + phanso[i];
}
return sum.RutGon(sum);

// Tìm phân số lớn nhất


PhanSo timMax() const {
PhanSo maxPS = phanso[0];
for (int i = 1; i < size; ++i) {
if (phanso[i] > maxPS) {
maxPS = phanso[i];
}
}
return maxPS;
}

// Tìm phân số nhỏ nhất


PhanSo timMin() const {
PhanSo minPS = phanso[0];
for (int i = 1; i < size; ++i) {
if (phanso[i] < minPS) {
minPS = phanso[i];
}
}
return minPS;
}

// Sắp xếp danh sách phân số tăng dần


void sapXepTangDan() {
sort(phanso, phanso + size);
}

// Sắp xếp danh sách phân số giảm dần


void sapXepGiamDan() {
sort(phanso, phanso + size, greater<PhanSo>());
}

// Truy cập phần tử của danh sách


PhanSo& operator[](int index) {
return phanso[index];
}
};

int main() {
int n;
cout << "Nhap so phan tu trong mang: ";
cin >> n;
DSPhanSo PS(n);

// Nhập danh sách phân số


PS.NhapPhanSo();

// Xuất danh sách phân số


PS.XuatPhanSo();

// Tính tổng
PhanSo Tong = PS.tinhTong();
cout << "Tong cua cac phan so la: " << Tong << endl;

// Tìm phân số lớn nhất


PhanSo Max = PS.timMax();
cout << "Phan so lon nhat la : " << Max << endl;

// Tìm phân số nhỏ nhất


PhanSo Min = PS.timMin();
cout << "Phan so nho nhat: " << Min << endl;

// Sắp xếp danh sách phân số tăng dần


PS.sapXepTangDan();
cout << "Danh sach phan so tang dan: ";
PS.XuatPhanSo();

// Sắp xếp danh sách phân số giảm dần


PS.sapXepGiamDan();
cout << "Danh sach phan so giam dan: ";
PS.XuatPhanSo();
return 0;
}

You might also like