[C] Phân số

Tác giả:

  • Trần Hán Huy – tranhanhuy.wordpress.com

Sách:

  • Bài tập kĩ thuật lập trình C/C++ – Nguyễn Tấn Trần Minh Khang

Đề bài

  • Phân số
    506 rút gọn phân số
    507 Tính tổng 2 phân số
    508 Tính hiệu 2 phân số
    509 Tính tích 2 phân số
    510 Tính thương 2 phân số
    511 Kiểm tra phân số tối giản
    512 Qui đồng phân số
    513 Kiểm tra phâ số dương
    514 Kiểm tra phâ số âm
    515 So sánh 2 phân số: hàm trả về 1 trong 3 giá trị: 0,-1,1
    516 Định nghĩa toán tử operator + cho 2 phân số
    517 Định nghĩa toán tử operator – cho 2 phân số
    518 Định nghĩa toán tử operator * cho 2 phân số
    519 Định nghĩa toán tử operator / cho 2 phân số
    520 Định nghĩa toán tử operator ++ cho 2 phân số
    521 Định nghĩa toán tử operator — cho 2 phân số

Code

#include <stdio.h>
#include <conio.h>
struct PhanSo
{
    float fTuSo;
    float fMauSo;
};
void NhapPhanSo(PhanSo &a)
{
    printf("Nhap Tu so: ");
    scanf_s("%f", a.fTuSo);
    printf("Nhap Mau so: ");
    scanf_s("%f", a.fMauSo);
}
void XuatPhanSo(PhanSo a)
{
    printf("%.2f / %.2f", a.fTuSo, a.fMauSo);
}
//506 rút gọn phân số
float UocSoChungLonNhat(float x, float y)
{
    while (x!=y)
    {
        if (x>y)
            x -= y;
        else
            y -=x;
    }
    return x;
}
PhanSo RutGonPhanSo(PhanSo a)
{
    float UCLN = UocSoChungLonNhat (a.fTuSo, a.fMauSo);
    a.fTuSo = a.fTuSo/UCLN;
    a.fMauSo = a.fMauSo/UCLN;
    return a;
}
//507 Tính tổng 2 phân số
PhanSo TinhTong2PhanSo(PhanSo a, PhanSo b)
{
    PhanSo kq;
    kq.fTuSo = a.fTuSo * b.fMauSo + a.fMauSo * b.fTuSo;
    kq.fMauSo = a.fMauSo * b.fMauSo;
    return kq;
}
//508 Tính hiệu 2 phân số
PhanSo TinhHieu2PhanSo(PhanSo a, PhanSo b)
{
    PhanSo kq;
    kq.fTuSo = a.fTuSo * b.fMauSo - a.fMauSo * b.fTuSo;
    kq.fMauSo = a.fMauSo + b.fMauSo;
    return kq;
}
//509 Tính tích 2 phân số
PhanSo TinhTich2PhanSo(PhanSo a, PhanSo b)
{
    PhanSo kq;
    kq.fTuSo = a.fTuSo * b.fTuSo;
    kq.fMauSo = a.fMauSo * b.fMauSo;
    return kq;
}
//510 Tính thương 2 phân số
PhanSo TinhThuong2PhanSo(PhanSo a, PhanSo b)
{
    PhanSo kq;
    kq.fTuSo = a.fTuSo * b.fMauSo;
    kq.fMauSo = a.fMauSo * b.fTuSo;
    return kq;
}
//511 Kiểm tra phân số tối giản
bool KiemTraPhanSoToiGian(PhanSo a)
{
    PhanSo c = RutGonPhanSo(a);
    if (c.fTuSo == a.fTuSo && c.fMauSo == a.fMauSo)
        return true;
    return false;
}


//512 Qui đồng phân số
void QuiDong2PhanSo(PhanSo &a, PhanSo &b)
{
    PhanSo c; 
    c.fTuSo = a.fTuSo;
    c.fMauSo = a.fMauSo;

    a.fTuSo *= b.fMauSo;
    a.fMauSo *= b.fMauSo;

    b.fTuSo *= c.fMauSo;
    b.fMauSo *= c.fMauSo;
}
//513 Kiểm tra phâ số dương
bool KiemTraPhanSoDuong(PhanSo a)
{
    if (a.fTuSo >=0 && a.fMauSo>0)
        return true;
    return false;
}
//514 Kiểm tra phâ số âm
bool KiemTraPhanSoAm(PhanSo a)
{
    if (a.fTuSo <0 || a.fMauSo<0)
        return true;
    return false;
}
//515 So sánh 2 phân số: hàm trả về 1 trong 3 giá trị: 0,-1,1
int SoSanh2PhanSo(PhanSo a, PhanSo b)
{
    float kq1 = a.fTuSo / a.fMauSo;
    float kq2 = b.fTuSo / b.fMauSo;
    if (kq1 < kq2)
        return -1;
    if (kq1 > kq2)
        return 1;
    return 0;
}
//516 Định nghĩa toán tử operator + cho 2 phân số
PhanSo operator +(PhanSo a, PhanSo b)
{
    PhanSo kq;
    kq.fTuSo = a.fTuSo * b.fMauSo + a.fMauSo * b.fTuSo;
    kq.fMauSo = a.fMauSo * b.fMauSo;
    return kq;
}
//517 Định nghĩa toán tử operator - cho 2 phân số
PhanSo operator -(PhanSo a, PhanSo b)
{
    PhanSo kq;
    kq.fTuSo = a.fTuSo * b.fMauSo - a.fMauSo * b.fTuSo;
    kq.fMauSo = a.fMauSo + b.fMauSo;
    return kq;
}
//518 Định nghĩa toán tử operator * cho 2 phân số
PhanSo operator *(PhanSo a, PhanSo b)
{
    PhanSo kq;
    kq.fTuSo = a.fTuSo * b.fTuSo;
    kq.fMauSo = a.fMauSo * b.fMauSo;
    return kq;
}
//519 Định nghĩa toán tử operator / cho 2 phân số
PhanSo operator /(PhanSo a, PhanSo b)
{
    PhanSo kq;
    kq.fTuSo = a.fTuSo * b.fMauSo;
    kq.fMauSo = a.fMauSo * b.fTuSo;
    return kq;
}
//520 Định nghĩa toán tử operator ++ cho 2 phân số
PhanSo operator ++ (PhanSo &a)
{
    a.fTuSo += a.fMauSo;
    return a;
}
//521 Định nghĩa toán tử operator -- cho 2 phân số
PhanSo operator ++ (PhanSo &a)
{
    a.fTuSo -= a.fMauSo;
    return a;
}

void main()
{
    PhanSo a;
    a.fTuSo = 5;
    a.fMauSo = 2;

    PhanSo b;
    b.fTuSo = 2;
    b.fMauSo=1;
    
    PhanSo c;

    //Xuat
    printf("\nPhan so a: ");
    XuatPhanSo(a);
    printf("\nPhan so b: ");
    XuatPhanSo(b);

    //506
    a = RutGonPhanSo(a);
    printf("\nSau khi rut gon phan so a: ");
    XuatPhanSo(a);
    b = RutGonPhanSo(b);
    printf("\nSau khi rut gon phan so b: ");
    XuatPhanSo(b);

    //507
    c = TinhTong2PhanSo(a,b);
    printf("\nTong 2 phan so: ");
    XuatPhanSo(c);

    //508
    c = TinhHieu2PhanSo(a,b);
    printf("\nHieu 2 phan so: ");
    XuatPhanSo(c);

    //509
    c = TinhTich2PhanSo(a,b);
    printf("\nTich 2 phan so: ");
    XuatPhanSo(c);
    
    //510
    c = TinhThuong2PhanSo(a,b);
    printf("\nThuong 2 phan so: ");
    XuatPhanSo(c);

    //511
    bool f = KiemTraPhanSoToiGian(a);
    if (f)
        printf("\nPhan so a toi gian roi");
    else
        printf("\nPhan so a chua toi gian");

    //512
    QuiDong2PhanSo(a,b);
    printf("\nSau khi qui dong");
    printf("\nPhan so a: ");
    XuatPhanSo(a);
    printf("\nPhan so b: ");
    XuatPhanSo(b);
}

Link source:

Leave a comment