[C] Hỗ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

  • Hỗn số
    523 Nhập hỗn số
    524 Xuất hỗn số
    525 Rút gọn hỗn số
    526 Tính tổng 2 hỗn số
    527 Tính hiệu 2 hỗn số
    528 Tính tích 2 hỗn số
    529 Tính thương 2 hỗn số
    530 Kiểm tra hỗn số tối giản
    531 Qui đồng 2 hỗn số

Code

/*Nick yahoo: conloyal*/
/*Soft: Visual studio 2008*/
#include <stdio.h>
//522 Khai báo dữ liệu để biểu diễn thông tin của một hỗn số
struct HonSo
{
    int iNguyen;
    int iTu;
    int iMau;
};
//523 Nhập hỗn số
void Nhap(HonSo &a)
{
    printf("\nNhap phan nguyen: ");
    scanf_s("%d",&a.iNguyen);
    printf("\nNhap tu so: ");
    scanf_s("%d",&a.iTu);
    printf("\nNhap mau so: ");
    scanf_s("%d",&a.iMau);
}
//524 Xuất hỗn số
void Xuat(HonSo a)
{
    printf("%d %d/%d", a.iNguyen, a.iTu, a.iMau);
}
//525 Rút gọn hỗn số
int UocChungLonNhat(int a, int b)
{
    while (a!=b)
    {
        if (a>b)
            a-=b;
        else
            b-=a;
    }
    return a;
}

HonSo RutGonHonSo(HonSo a)
{
    if (a.iTu > a.iMau)
    {
        int tam = a.iTu / a.iMau;
        a.iNguyen += tam;
        a.iTu -= a.iMau * tam;
    }
    int UCLN = UocChungLonNhat(a.iTu, a.iMau);
    a.iTu /= UCLN;
    a.iMau /= UCLN;
    return a;
}
//526 Tính tổng 2 hỗn số
HonSo TinhTong(HonSo a, HonSo b)
{
    HonSo c;
    c.iNguyen = a.iNguyen + b.iNguyen;
    c.iTu = a.iTu * b.iMau + a.iMau * b.iTu;
    c.iMau = a.iMau * b.iMau;
    return c;
}
//527 Tính hiệu 2 hỗn số
HonSo TinhHieu(HonSo a, HonSo b)
{
    HonSo c;
    c.iNguyen = a.iNguyen - b.iNguyen;
    c.iTu = a.iTu * b.iMau - a.iMau * b.iTu;
    c.iMau = a.iMau * b.iMau;
    return c;
}
//528 Tính tích 2 hỗn số
HonSo TinhTich(HonSo a, HonSo b)
{
    a.iTu = a.iTu + a.iNguyen*a.iMau;
    b.iTu = b.iTu + b.iNguyen*b.iMau;

    HonSo c;
    c.iNguyen = 0;
    c.iTu = a.iTu * b.iTu;
    c.iMau = a.iMau * b.iMau;
    c = RutGonHonSo(c);
    return c;
}
//529 Tính thương 2 hỗn số
HonSo TinhThuong(HonSo a, HonSo b)
{
    a.iTu = a.iTu + a.iNguyen*a.iMau;
    b.iTu = b.iTu + b.iNguyen*b.iMau;

    HonSo c;
    c.iNguyen = 0;
    c.iTu = a.iTu * b.iMau;
    c.iMau = a.iMau * b.iTu;
    c = RutGonHonSo(c);
    return c;
}
//530 Kiểm tra hỗn số tối giản
bool KtraHonSoToiGian(HonSo a)
{
    int UCLN = UocChungLonNhat(a.iTu, a.iMau);
    if (UCLN == 1)
        return true;
    return false;
}
//531 Qui đồng 2 hỗn số
void QuiDong2HonSo(HonSo &a, HonSo &b)
{
    HonSo c = a;
    a.iTu = a.iTu * b.iMau;
    a.iMau = a.iMau * b.iMau;
    b.iTu = b.iTu * c.iMau;
    b.iMau = c.iMau * b.iMau;
}
void main()
{
    HonSo a,b,c;
    Nhap(a);
    Nhap(b);
    printf ("\nHon so a: ");
    Xuat(a);
    printf ("\nHon so b: ");
    Xuat(b);

    a = RutGonHonSo(a);
    printf("\na sau khi rut gon: ");
    Xuat(a);
    
    printf("\nTong 2 hon so: ");
    Xuat(TinhTong(a,b));

    printf("\nHieu 2 hon so: ");
    Xuat(TinhHieu(a,b));

    printf("\nTich 2 hon so: ");
    Xuat(TinhTich(a,b));

    printf("\nThuong 2 hon so: ");
    Xuat(TinhThuong(a,b));

    if (KtraHonSoToiGian(a))
        printf("\nHon so a toi gian");
    else
        printf("\nHon so a chua toi gian");

    QuiDong2HonSo(a,b);
    printf("\na sau khi qui dong: ");
    Xuat(a);
    printf("\nb sau khi qui dong: ");
    Xuat(b);
}
  

Link source:

One response to “[C] Hỗn số”

  1. Khang Nhat says :

    Thank ban…Ban lam rat hay.

Leave a comment