Mọi người xem dùm em bài này nhá, bài thực hành yêu cầu tính toán phân số qua "struct", chương trình của em nó chạy bình thường với những kết quả > 0, còn những kết quả < 0 thì bị lỗi. VD em chạy:
- Phân số 1: 3/5
- Phân số 2: 4/5
Thì Tổng vẫn ra kết quả bình thường là 7/5, còn tới tính hiệu thì chương trình bị lỗi.
Tương tự với lỗi nhập số, khi em nhập một phân số âm thì bước rút gọn cũng bị lỗi tương tự.
- Phân số 1: 3/5
- Phân số 2: 4/5
Thì Tổng vẫn ra kết quả bình thường là 7/5, còn tới tính hiệu thì chương trình bị lỗi.
Tương tự với lỗi nhập số, khi em nhập một phân số âm thì bước rút gọn cũng bị lỗi tương tự.
Code:
#include<stdio.h> typedef struct PhanSo { int iTuSo; int iMauSo; }So; void Nhap(So* i, int m); void Xuat(So i); So Tong(So u, So v); So Hieu(So u, So v); So Tich(So u, So v); So Thuong(So u, So v); So RutGon(So a); int SoSanh(So u, So v); main() { So a,b,c,d,e,f,g,h; Nhap(&a,1); g=RutGon(a);printf("Phan so thu 1 khi da rut gon: ");Xuat(g); printf("\n\n"); Nhap(&b,2); h=RutGon(b);printf("Phan so thu 2 khi da rut gon: ");Xuat(h); printf("\n\nHai so co:"); c=Tong(a,b);printf("\n Tong la: ");Xuat(RutGon(c)); d=Hieu(a,b);printf("\n Hieu la: ");Xuat(RutGon(d)); e=Tich(a,b);printf("\n Tich la: ");Xuat(RutGon(e)); f=Thuong(a,b);printf("\n Thuong la: ");Xuat(RutGon(f)); printf("\n\nQuy uoc so sanh:\n - a > b --> 1\n - a < b --> -1\n - a = b --> 0"); printf("\nKet qua so sanh 2 so: "); printf("\n%d",SoSanh(g,h)); } void Nhap(So* i, int m) { printf("Nhap tu so thu %d: ", m);scanf("%d", &i->iTuSo); printf("Nhap mau so thu %d: ", m);scanf("%d", &i->iMauSo); } void Xuat(So i) { if (i.iTuSo % i.iMauSo != 0) printf("%d/%d", i.iTuSo, i.iMauSo); else printf("%d", i.iTuSo/i.iMauSo); } So Tong(So u, So v) { //Tim uoc chung lon nhat //u=a/c v=b/d So i; int a=u.iTuSo,b=v.iTuSo,c=u.iMauSo,d=v.iMauSo,e; while(u.iMauSo != v.iMauSo) { if (u.iMauSo > v.iMauSo) u.iMauSo = u.iMauSo - v.iMauSo; else v.iMauSo = v.iMauSo - u.iMauSo; } //tim boi chung nho nhat e = c*d/ u.iMauSo; //quy dong a=a*(e/c); b=b*(e/d); c=e; d=e; i.iTuSo= a+b; i.iMauSo= c; return i; } So Hieu(So u, So v) { //Tim uoc chung lon nhat //u=a/c v=b/d So i; int a=u.iTuSo,b=v.iTuSo,c=u.iMauSo,d=v.iMauSo,e; while(u.iMauSo != v.iMauSo) { if (u.iMauSo > v.iMauSo) u.iMauSo = u.iMauSo - v.iMauSo; else v.iMauSo = v.iMauSo - u.iMauSo; } //tim boi chung nho nhat e = c*d/ u.iMauSo; //quy dong a=a*(e/c); b=b*(e/d); c=e; d=e; i.iTuSo= a-b; i.iMauSo= c; return i; } So Tich(So u, So v) { So i; int a=u.iTuSo,b=v.iTuSo,c=u.iMauSo,d=v.iMauSo; i.iTuSo=a*b; i.iMauSo=c*d; return i; } So Thuong(So u, So v) { So i; int a=u.iTuSo,b=v.iTuSo,c=u.iMauSo,d=v.iMauSo; i.iTuSo=a*d; i.iMauSo=c*b; return i; } So RutGon(So a) { So i; int b=a.iTuSo,d=a.iMauSo; while(a.iTuSo != a.iMauSo) { if (a.iTuSo > a.iMauSo) a.iTuSo = a.iTuSo - a.iMauSo; else a.iMauSo = a.iMauSo - a.iTuSo; } i.iTuSo=b/a.iTuSo; i.iMauSo=d/a.iTuSo; return i; } int SoSanh(So u, So v) { int a=u.iTuSo,b=v.iTuSo,c=u.iMauSo,d=v.iMauSo,e; while(u.iMauSo != v.iMauSo) { if (u.iMauSo > v.iMauSo) u.iMauSo = u.iMauSo - v.iMauSo; else v.iMauSo = v.iMauSo - u.iMauSo; } //tim boi chung nho nhat e = c*d/ u.iMauSo; //quy dong a=a*(e/c); b=b*(e/d); if (a>b) return 1; if (a<b) return -1; if (a==b) return 0; }
Comment