Mình đã mất rất nhiều thời gian với bài nảy! Mong những ai đọc nó hãy góp ý giúp mình ..... cảm ơn các bạn!
Mình có hàm nạp chồng so sánh như sau::
Sau đó mình sử dụng nó trong hàm này::
Kết quả là Doi(a, b) trong hàm SapXep() không bao giờ xảy ra??? Nhưng nếu sửa thành::
thì bài code run tốt! Vậy lỗi là do đâu?? Với cách gọi if(a>b) thì trình biên dịch có vấn đề gì làm Doi(a, b) ko thực thi được??
ĐÂY LÀ TOÀN BÀI CODE CỦA MÌNH:::
Mình có hàm nạp chồng so sánh như sau::
Code:
int PhanSo::operator>(PhanSo *M) { float i, j; i = float(this->tuso); j = float(M->tuso); if(float(i/mauso) > float(j/(M->mauso)) ) return 1; else return 0; }
Code:
void SapXep() { PhanSo *a, *b; float i,j; a = first; b = NULL; while(a!=NULL) { b = a->lnext(); while(b!=NULL) { if(a>b) Doi(a, b); b = b->lnext(); } a = a->lnext(); } }
Code:
void SapXep() { PhanSo *a, *b; float i,j; a = first; b = NULL; while(a!=NULL) { b = a->lnext(); while(b!=NULL) { i = float(a->tuso); j = float(b->tuso); if(float(i/(a->mauso)) > float(j/(b->mauso) )) Doi(a, b); b = b->lnext(); } a = a->lnext(); } }
ĐÂY LÀ TOÀN BÀI CODE CỦA MÌNH:::
Code:
#include<iostream.h> #include<conio.h> class PhanSo { private: int tuso; int mauso; PhanSo *next; public: PhanSo() { next = NULL; tuso = 0; } void ltuso(int tuso) { this->tuso = tuso; } void lmauso(int mauso) { this->mauso = mauso; } friend istream& operator>>(istream &in, PhanSo *&M); friend ostream& operator<<(ostream &out, PhanSo *&M); friend int USCLN(PhanSo *M); friend void SapXep(); friend void Doi(PhanSo *M, PhanSo *N); int operator>(PhanSo *M); PhanSo* operator+(PhanSo *M); void dnext(PhanSo *M){ this->next = M; } PhanSo* lnext(){ return this->next; } }; PhanSo *first, *last, *p; char c; int PhanSo::operator>(PhanSo *M) { float i, j; i = float(this->tuso); j = float(M->tuso); if(float(i/mauso) > float(j/(M->mauso)) ) return 1; else return 0; } PhanSo* PhanSo::operator+(PhanSo *M) { PhanSo *a; a->tuso = this->tuso*M->mauso + M->tuso*this->mauso; a->mauso = this->mauso*M->mauso; return a; } istream& operator>>(istream &in, PhanSo *&M) { cout<<"Nhap vao phan so: "; in>>M->tuso>>c>>M->mauso; return in; } ostream& operator<<(ostream &out, PhanSo *&M) { if(M->tuso == M->mauso) out<<"1"<<endl; else { if(USCLN(M) == M->mauso) out<<M->tuso/USCLN(M)<<endl; else out<<M->tuso/USCLN(M)<<"/"<<M->mauso/USCLN(M)<<endl; } return out; } int USCLN(PhanSo *M) { int temp; int i; if(M->tuso < M->mauso) temp = M->tuso; else temp = M->mauso; for(i=temp; i>=1; --i) { if(M->tuso % i ==0 && M->mauso % i ==0) break; } return i; } void Nhap() { do { p = new PhanSo; cin>>p; if(first == NULL) { first = p; last = p; } else { last->dnext(p); last=p; } cout<<"Ban co muon nhap tiep khong?? c/k"; c = getch(); cout<<endl; }while(c!='k'); } void Xuat() { PhanSo *a; a = first; while(a!=NULL) { cout<<a; a = a->lnext(); } } void Doi(PhanSo *M, PhanSo *N) { int temp; temp = M->tuso; M->ltuso(N->tuso); N->ltuso(temp); temp = M->mauso; M->lmauso(N->mauso); N->lmauso(temp); } void SapXep() { PhanSo *a, *b; float i,j; a = first; b = NULL; while(a!=NULL) { b = a->lnext(); while(b!=NULL) { if(a>b) Doi(a, b);// ĐOẠN NÀY ĐÂY?? } a = a->lnext(); } } main() { first = NULL; Nhap(); SapXep(); Xuat(); getch(); }
Comment