CẤU TRÚC DỮ LIỆU PHÂN SỐ
Cấu trúc dữ liệu phân số:
Code:
typedef struct {
int Tu;
int Mau;
}PhanSo;
Nhập phân số:
Code:
//nhap phan so
PhanSo Nhap(){
PhanSo temp;
printf("Nhap phan so:\n");
printf("\tTu = ");
scanf("%d",&temp.Tu);
temp.Mau = 0;
while(temp.Mau == 0)
{
printf("\tMau = ");
scanf("%d",&temp.Mau);
}
return temp;
}
Xuất phân số:
Code:
//xuat phan so
void Xuat(PhanSo p) {
printf("%d/%d",p.Tu,p.Mau);
}
Để rút gọn phân số ta cài đặt hàm tìm Ước chung lớn nhất:
Code:
//tim uoc chung lon nhat cua hai so a va b
int UCLN(int a, int b) {
if(a==b)
return a;
else
if(a>b)
return UCLN(a-b,b);
else
return UCLN(a,b-a);
}
Rút gọn phân số:
Code:
// Rut gon phan so
PhanSo RutGon(PhanSo p) {
PhanSo temp = p;
int k = UCLN(abs(temp.Tu),abs(temp.Mau));
temp.Tu/=k;
temp.Mau/=k;
return temp;
}
Các phép toán trên trên phân số:
- Phép cộng hai phân số trả về 1 phân số
Code:
//tong hai phan so
PhanSo Tong(PhanSo p, PhanSo q) {
PhanSo temp = {p.Tu*q.Mau + q.Tu*p.Mau,p.Mau*q.Mau};
temp = RutGon(temp);
return temp;
}
- Phép trừ hai phân số trả về 1 phân số
Code:
//hieu hai phan so
PhanSo Hieu(PhanSo p, PhanSo q) {
PhanSo temp = {p.Tu*q.Mau - q.Tu*p.Mau,p.Mau*q.Mau};
temp = RutGon(temp);
return temp;
}
- Phép nhân hai phân số trả về 1 phân số
Code:
//nhan hai phan so
PhanSo Tich(PhanSo p, PhanSo q) {
PhanSo temp = {p.Tu*q.Tu,p.Mau*q.Mau};
temp = RutGon(temp);
return temp;
}
- Phép chia hai phân số trả về 1 phân số
Code:
//chia hai phan so
PhanSo Thuong(PhanSo p, PhanSo q) {
PhanSo temp = {p.Tu*q.Mau,p.Mau*q.Tu};
temp = RutGon(temp);
return temp;
}
CHƯƠNG TRÌNH MẪU
Code:
#include "conio.h"
#include "stdio.h"
#include "math.h"
typedef struct {
int Tu;
int Mau;
}PhanSo;
//nhap phan so
PhanSo Nhap(){
PhanSo temp;
printf("Nhap phan so:\n");
printf("\tTu = ");
scanf("%d",&temp.Tu);
temp.Mau = 0;
while(temp.Mau == 0)
{
printf("\tMau = ");
scanf("%d",&temp.Mau);
}
return temp;
}
//xuat phan so
void Xuat(PhanSo p) {
printf("%d/%d",p.Tu,p.Mau);
}
//tim uoc chung lon nhat cua hai so a va b
int UCLN(int a, int b) {
if(a==b)
return a;
else
if(a>b)
return UCLN(a-b,b);
else
return UCLN(a,b-a);
}
// Rut gon phan so
PhanSo RutGon(PhanSo p) {
PhanSo temp = p;
int k = UCLN(abs(temp.Tu),abs(temp.Mau));
temp.Tu/=k;
temp.Mau/=k;
return temp;
}
//tong hai phan so
PhanSo Tong(PhanSo p, PhanSo q) {
PhanSo temp = {p.Tu*q.Mau + q.Tu*p.Mau,p.Mau*q.Mau};
temp = RutGon(temp);
return temp;
}
//hieu hai phan so
PhanSo Hieu(PhanSo p, PhanSo q) {
PhanSo temp = {p.Tu*q.Mau - q.Tu*p.Mau,p.Mau*q.Mau};
temp = RutGon(temp);
return temp;
}
//nhan hai phan so
PhanSo Tich(PhanSo p, PhanSo q) {
PhanSo temp = {p.Tu*q.Tu,p.Mau*q.Mau};
temp = RutGon(temp);
return temp;
}
//chia hai phan so
PhanSo Thuong(PhanSo p, PhanSo q) {
PhanSo temp = {p.Tu*q.Mau,p.Mau*q.Tu};
temp = RutGon(temp);
return temp;
}
void main() {
clrscr();
PhanSo t = Nhap();
PhanSo t1 = Nhap();
printf("Mot so phep toan\n");
//tong hai phan so
Xuat(t);
printf(" + ");
Xuat(t1);
printf(" = ");
Xuat(Tong(t,t1));
//hieu hai phan so
printf("\n");
Xuat(t);
printf(" - ");
Xuat(t1);
printf(" = ");
Xuat(Hieu(t,t1));
//nhan hai phan so
printf("\n");
Xuat(t);
printf(" * ");
Xuat(t1);
printf(" = ");
Xuat(Tich(t,t1));
//chia hai phan so
printf("\n");
Xuat(t);
printf(" / ");
Xuat(t1);
printf(" = ");
Xuat(Thuong(t,t1));
getch();
}