Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Tính toán cộng trừ nhân chia trên phân số viết bằng C++ Class

  1. #1
    Ngày gia nhập
    09 2007
    Bài viết
    7

    Mặc định Tính toán cộng trừ nhân chia trên phân số viết bằng C++ Class

    bài này là chương trình em viết để + - * / và so sánh 2 phân số, khi chạy chương trình với các số nhỏ và tử khác 0 thì không có vấn đề gì. Nhưng khi nhập tử là 0 hoặc các số lớn( 12/17 và 23/21 chẳng hạn) thì nó lại không chạy. Em chẳng biết là sao nữa. giúp dùm em với...

    Đây là code mà em viết:
    C++ Code:
    1. #include "iostream.h"
    2. #include "conio.h"
    3.  
    4. class PhanSo
    5. {
    6. private:
    7.     int iTu;
    8.     int iMau;
    9. public:
    10.     void Nhap();
    11.     void Xuat();
    12.     int KiemTra ();
    13.     PhanSo Cong (const PhanSo &);
    14.     PhanSo Tru (const PhanSo &);
    15.     PhanSo Nhan (const PhanSo & );
    16.     PhanSo Chia (const PhanSo &);
    17.     int SoSanh(const PhanSo &);
    18. };
    19.  
    20. void PhanSo::Nhap()
    21. {
    22.     cout<<"+Nhap tu: ";
    23.     cin>>this->iTu;
    24.  
    25.     cout<<"+Nhap mau: ";
    26.     cin>>this->iMau;
    27.  
    28.     if(this->iTu == this->iMau)
    29.         this->iTu=this->iMau=1;
    30. }
    31.  
    32. void PhanSo::Xuat()
    33. {
    34.     if(this->iTu == 0)
    35.         cout<<"0\n";
    36.     else
    37.     {
    38.         if((this->iTu != 0) && (this->iMau == 1))
    39.             cout<<this->iTu<<"\n";
    40.         else
    41.         {
    42.             if((this->iTu != 0) && (this->iMau != 0))
    43.                 cout<<this->iTu<<"/"<<this->iMau<<"\n";
    44.         }
    45.     }
    46. }
    47.  
    48. int RutGon(int a,int b)
    49. {
    50.     while((a!=0)&&(b!=0))
    51.     {
    52.         if(a>=b)
    53.         a-=b;
    54.         else
    55.         b-=a;
    56.     }
    57.     if(a==0)   
    58.         return b;
    59.     else
    60.         return a;
    61.  
    62. }
    63.  
    64. int PhanSo::KiemTra()
    65. {
    66.     return(this->iMau != 0)?1:0;
    67. }
    68.  
    69. PhanSo PhanSo::Cong(const PhanSo &a)
    70. {
    71.     PhanSo c;
    72.  
    73.     c.iTu = (this->iTu * a.iMau) + (this->iMau * a.iTu);
    74.     c.iMau = this->iMau * a.iMau;
    75.  
    76.     int k =RutGon(c.iTu, c.iMau);
    77.     c.iTu=c.iTu/k;
    78.     c.iMau=c.iMau/k;
    79.  
    80.     return c;
    81. }
    82.  
    83. PhanSo PhanSo::Tru(const PhanSo &a)
    84. {
    85.     PhanSo c;
    86.  
    87.     c.iTu = (this->iTu * a.iMau) - (this->iMau * a.iTu);
    88.     c.iMau = this->iMau * a.iMau;
    89.  
    90.     int k =RutGon(c.iTu, c.iMau);
    91.     c.iTu/=k;
    92.     c.iMau/=k;
    93.  
    94.     return c;
    95. }
    96.  
    97. PhanSo PhanSo::Nhan(const PhanSo &a)
    98. {
    99.     PhanSo c;
    100.  
    101.     c.iTu = this->iTu * a.iTu;
    102.     c.iMau = this->iMau * a.iMau;
    103.  
    104.     int k =RutGon(c.iTu, c.iMau);
    105.     c.iTu=c.iTu/k;
    106.     c.iMau=c.iMau/k;
    107.  
    108.     return c;
    109. }
    110.  
    111. PhanSo PhanSo::Chia(const PhanSo &a)
    112. {
    113.     PhanSo c;
    114.  
    115.     c.iTu = this->iTu * a.iMau;
    116.     c.iMau = this->iMau * a.iTu;
    117.  
    118.     int k =RutGon(c.iTu, c.iMau);
    119.     c.iTu/=k;
    120.     c.iMau/=k;
    121.  
    122.     return c;
    123. }
    124.  
    125. int PhanSo::SoSanh(const PhanSo &a)
    126. {
    127.     int tong;
    128.  
    129.     tong = (this->iTu * a.iMau) - (this->iMau * a.iTu);
    130.  
    131.     if(tong <0)
    132.         return -1;
    133.     if(tong == 0)
    134.         return 0;
    135.     if(tong > 0)
    136.         return 1;
    137. }
    138.  
    139. void main()
    140. {
    141.     PhanSo a, b, c, d ,e, f;
    142. lap_lai:
    143.     cout<<"\tNHAP PHAN SO THU 1: \n";
    144.     a.Nhap();
    145.     a.KiemTra();
    146.     int i = a.KiemTra();
    147.     if(i==1)
    148.     {
    149.         cout<<"\tNHAP PHAN SO THU 2: \n";
    150.         b.Nhap();
    151.         b.KiemTra();
    152.  
    153.         int j = b.KiemTra();
    154.         if(j == 1)
    155.         {
    156.             cout<<"-------------KET QUA-------------\n";
    157.             cout<<"Tong hai phan so la: ";
    158.             c = a.Cong(b);
    159.             c.Xuat();
    160.  
    161.             cout<<"Hieu hai phan so la: ";
    162.             d = a.Tru(b);
    163.             d.Xuat();
    164.  
    165.             cout<<"Tich hai phan so la: ";
    166.             e = a.Nhan(b);
    167.             e.Xuat();
    168.  
    169.             cout<<"Thuong hai phan so la: ";
    170.             f = a.Chia(b);
    171.             f.Xuat();
    172.  
    173.             a.SoSanh(b);
    174.             int i = a.SoSanh(b);
    175.             if(i == -1 )
    176.                 cout<<"Phan so thu nhat nho hon phan so thu hai"<<endl;
    177.             else
    178.             {
    179.                 if(i == 0)
    180.                     cout<<"Hai phan so bang nhau"<<endl;
    181.                 else
    182.                     cout<<"Phan so thu nhat lon hon phan so thu hai"<<endl;
    183.             }
    184.         }
    185.         else
    186.         {
    187.             cout<<"Ban nhap mau so sai, nhap lai\n";
    188.             goto lap_lai;
    189.         }
    190.     }
    191.     else
    192.     {
    193.         cout<<"Ban nhap mau so sai, nhap lai\n";
    194.         goto lap_lai;
    195.     }
    196. }
    Một ngày 24h

  2. #2
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Mình có vài ý về bài làm của bạn như sau:

    + Đặt tên hàm ko đúng ý nghĩa (hàm Rutgon theo mình nghĩ là bạn đang tìm Bội số chung nhỏ nhất và hàm này bạn code sai)
    + Tất cả các toán tử trên phải để là hàm friend, ko nên để trong lớp, rất tối nghĩa. Và nếu đã là toán tử thì ai lại dùng hàm như thế, phải dùng operator chứ
    + Bạn mất công tạo đối tượng, khởi tạo đối tượng để rồi sau đó kiểm tra đối tượng có lỗi hay ko. Do ở đây chỉ là lớp PhanSo còn nhỏ, lỡ bạn code một cái lớp lớn thì ... ~~~> chuyển thành kiểm tra khi dữ liệu được nhập
    + Có nhiều lỗi chưa bắt, kiểm tra chưa chặt ...

    Thân.

  3. #3
    Ngày gia nhập
    07 2007
    Nơi ở
    Lang thang không nơi nương tựa
    Bài viết
    18

    C++ Code:
    1. bool operator > (CPhanSo p)
    2.     {
    3.         return tu*p.mau > mau*p.tu;
    4.     };
    5. class CPhanSo  
    6. {
    7. public:
    8.    
    9.     CPhanSo(int t = 0, int m = 1):tu(t) ,mau(m){RutGon();};
    10.  
    11.     void InRa() { cout <<tu<<"/"<<mau; };
    12.    
    13.     CPhanSo operator ++()
    14.     {    
    15.     tu = tu + mau ;
    16.     return CPhanSo (tu,mau);
    17.     };
    18.  
    19.     CPhanSo operator ++(int)
    20.     {    
    21.    
    22.     int tam = tu;
    23.     tu = tu + mau;
    24.     return CPhanSo (tam,mau);
    25.     };
    26.     bool operator> (CPhanSo p)
    27.     {
    28.         return tu*p.mau > mau*p.tu;
    29.     };
    30.  
    31. private:
    32.     int tu;
    33.     int mau;
    34.     CPhanSo RutGon()
    35.     {
    36.         int a = tu , b = mau;
    37.         while (b>0)
    38.         {
    39.             int r = a % b;
    40.             a = b;
    41.             b = r;
    42.         }
    43.         tu = tu / a;
    44.         mau = mau / a;
    45.         return *this;
    46.     };
    47.  
    48. };

Các đề tài tương tự

  1. C++0x Ebook Cần tài liệu CTDL và GT viết trên Class
    Gửi bởi HacAmThienThan trong diễn đàn Tài liệu, ebooks và công cụ
    Trả lời: 1
    Bài viết cuối: 15-11-2011, 10:40 AM
  2. Viết code trên Form và viết code trong class có gì khác nhau.
    Gửi bởi hocCsharp trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 21
    Bài viết cuối: 21-01-2011, 10:37 PM
  3. viết các class lồng nhau ? (trên C2005)
    Gửi bởi thaihoa311 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 10-05-2010, 12:49 AM
  4. Bài tập C | Tìm kiếm trên mảng 1 chiều viết bằng C?
    Gửi bởi sonas trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 14-04-2009, 11:25 PM
  5. Hoàn thiện Class cộng, trừ, nhân, chia phân số.
    Gửi bởi hellboy1088 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 27-10-2008, 10:43 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn