30/09/2018, 16:35
Mọi người giúp em bài toán Phân Số
Bài toán tính tổng hiệu tích thương 2 Phân số.Khi em nhập phân số thứ 2 > ps 1 thì không tính được.Tìm giúp em lỗi với ạ.Em cảm ơn !!! @ltd @david15894
#include<iostream>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
//#include<stdio.h>
using namespace std;
struct SPhanSo
{
int iTuSo;
int iMauSo;
};
void NhapPhanSo(SPhanSo &PS,int n)
{
cout << "Nhap phan so thu "<<n<<" : "<<endl;
cout << "Nhap tu so : ";
cin >> PS.iTuSo;
do
{
cout << "Nhap mau so khac 0 : ";
cin >> PS.iMauSo;
if(PS.iMauSo == 0)
cout << "Vui long nhap mau so khac 0 "<<endl;
}
while(PS.iMauSo == 0);
}
int TinhUocChungLonNhat(int iA,int iB)
{
int UCLN;
while( iA != iB )
{
if(iA > iB)
iA = iA - iB;
else
iB = iB - iA;
}
UCLN = iA;
return UCLN;
}
int TinhBoiChungNhoNhat(int iA,int iB)
{
int UCLN = TinhUocChungLonNhat(iA,iB);
int BCNN = iA * iB / UCLN;
return BCNN;
}
void RutGonPhanSo(SPhanSo &PS)
{
int u = TinhUocChungLonNhat(PS.iTuSo,PS.iMauSo);
PS.iTuSo = PS.iTuSo / u;
PS.iMauSo = PS.iMauSo / u;
}
SPhanSo TongHaiPhanSo(SPhanSo PS1,SPhanSo PS2)
{
SPhanSo Tong;
int b = TinhBoiChungNhoNhat(PS1.iMauSo,PS2.iMauSo);
Tong.iTuSo = (PS1.iTuSo *(b / PS1.iMauSo))+ (PS2.iTuSo * (b / PS2.iMauSo));
Tong.iMauSo = b;
RutGonPhanSo(Tong);
return Tong;
}
SPhanSo HieuHaiPhanSo(SPhanSo PS1,SPhanSo PS2)
{
SPhanSo Hieu;
int b = TinhBoiChungNhoNhat(PS1.iMauSo,PS2.iMauSo);
Hieu.iTuSo = (PS1.iTuSo * b / PS1.iMauSo) - (PS2.iTuSo * b / PS2.iMauSo);
Hieu.iMauSo = b;
RutGonPhanSo(Hieu);
return Hieu;
}
SPhanSo TichHaiPhanSo(SPhanSo PS1,SPhanSo PS2)
{
SPhanSo Tich;
Tich.iTuSo = PS1.iTuSo * PS2.iTuSo;
Tich.iMauSo = PS1.iMauSo * PS2.iMauSo;
RutGonPhanSo(Tich);
return Tich;
}
SPhanSo ThuongHaiPhanSo(SPhanSo PS1,SPhanSo PS2)
{
SPhanSo Thuong;
Thuong.iTuSo = PS1.iTuSo * PS2.iMauSo;
Thuong.iMauSo = PS1.iMauSo * PS2.iTuSo;
RutGonPhanSo(Thuong);
return Thuong;
}
int main()
{
SPhanSo PS1;
SPhanSo PS2;
NhapPhanSo(PS1,1);
NhapPhanSo(PS2,2);
system("cls");
SPhanSo Tong = TongHaiPhanSo(PS1,PS2);
SPhanSo Hieu = HieuHaiPhanSo(PS1,PS2);
SPhanSo Tich = TichHaiPhanSo(PS1,PS2);
SPhanSo Thuong = ThuongHaiPhanSo(PS1,PS2);
cout << "Tong 2 phan so la : "<<Tong.iTuSo<<"/"<<Tong.iMauSo<<endl;
cout << "Hieu 2 phan so la : "<<Hieu.iTuSo<<"/"<<Hieu.iMauSo<<endl;
cout << "Tich 2 phan so la : "<<Tich.iTuSo<<"/"<<Tich.iMauSo<<endl;
cout << "Thuong 2 phan so la : "<<Thuong.iTuSo<<"/"<<Thuong.iMauSo<<endl;
getch();
return 0;
}
Bài liên quan
Bị lỗi là do khi
ps1 < ps2
thìps1 - ps2
cótử số <=0 || mẫu số <=0
do đó hàmTinhUocChungLonNhat
sẽ chạy vô hạn.####Sửa lại:
có thể đặt lại
iA=abs(iA);
iB=abs(iB);
trông code nó gọn hơn
####edited: à trong c thì hàm
abs
là củaint
còn cpp nó lại chỉ áp dụng cho số thực. Nếu dùng thì phải gọi std::abs(int) trong thư viện cstdlib thì phải.