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

Đề tài: Lỗi khi xây dựng các hàm kiểm tra năm nhuận và cuối tháng với lớp Date

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

    Mặc định Lỗi khi xây dựng các hàm kiểm tra năm nhuận và cuối tháng với lớp Date

    Mình đang làm một bài tập về xây dựng lớp DATE với
    Kiểu DL: day,month,year
    Các phương thức: nhập ,xuất, cộng và trừ một ngày
    main : khởi tạo một đối tượng, in kết quả côg,trừ
    Chương trình báo lỗi mà mình sửa mãi ko đc, mong đc mọi người giúp đỡ :|

    Code:
    #include<iostream>
    #include<math.h>
    
    using namespace std;
    
    class DATE{                    // Xay dung lop DATE
          private:
              int day,month,year;
          public:
              DATE(){                  // Ham khoi tao ko doi
                  day = 0;       
                  month = 0;
                  year = 0;
              }      
              DATE(int &x, int &y, int &z){         // Ham khoi tao co doi
                  day = x;
                  month = y;
                  year = z;         
              }
              void input_date();     // Ham nhap ngay thang nam
              void output_date();    // Ham in ngay thang nam
              int test_leapyear();    // Ham kiem tra nam nhuan
              int test_lastmonth();   // Ham kiem tra cuoi thang
              DATE add_oneday();       // Ham cong them mot ngay
              DATE sub_oneday();     // Ham tru mot ngay
    };
    
    void DATE:: input_date(){
         cout << "Day " ; cin >> day;
         cout << " Month "; cin >> month;
         cout << " Year "; cin >> year;   
    }
    
    void DATE:: output_date(){
         cout << day << " / " << month << " / " << year;     
    }
    
    int test_leapyear(int &a){
        year = a;                    // Bao loi 
        if(year % 4 == 0)
             return 1;
        else 
             return 0;    
    }
    
    int test_lastmonth(int &b){
        year = b;
        switch (month){                   // Bao loi
             case 1,3,5,7,8,10,12 :
                  if(day == 31)
                     return 1;
                  else
                     return 0;
                  break;
             case 4,6,9,11:
                  if(day == 30)
                     return 1;
                  else
                     return 0;
                  break;
             case 2:
                  if(test_leapyear(year)){
                      if(day == 29)
                         return 1;
                      else
                         return 0;                    
                  }
                  else{
                       if(day == 28 )
                         return 1;
                       else
                         return 0;     
                  }
                  break;
        }    
    }
    
    DATE DATE:: add_oneday(){
         if(test_lastmonth(month)){
            if(month == 12){
               day = 1;
               month = 1;
               year ++;         
            }         
            else 
               day = 1;
               month ++;            
         }     
         else
             day ++;
         
    }
    
    DATE DATE:: sub_oneday(){
         if(day == 1){
            if(month == 1){
               day = 31;
               month = 12;
               year --;        
            }        
            if(month == 2 || month == 4 || month == 6 || month == 8 || month == 9 || month == 11){
               day = 31;
               month --;
            }
            if(month == 5 || month == 7 || month == 10 || month == 12){
               day = 30;
               month --;
            }
            if(month == 3){
               if(test_leapyear(year))
                  day = 29;                 
               else
                  day = 28;
               month --;
            }
         else
            day --;
            
         }     
    }
    
    int main(){
        DATE p(31,2,1992);        // Khoi tao doi tuong ngay 31/2/1992   ----- Bao loi T.T
        DATE q,h;
        p.output_date();
        q = p.add_oneday();
        cout << "Ket qua sau cong mot ngay : "; q.output_date();
        h = q.sub_oneday();
        cout << "\nKet qua sau tru mot ngay: "; h.output_date();
        system("pause");    
        return 0;
    }

  2. #2
    Ngày gia nhập
    12 2010
    Nơi ở
    Cần thơ
    Bài viết
    273

    Có thể do thuộc tính private hay public gì đó....
    Ai bất tài, tôi nhìn hoài chẳng thấy,
    Đi khắp phòng tôi lấy 1 tấm gương,
    Khẽ đặt lên một góc phía bức tường,
    Nhìn vào đó, tôi tận tường kẻ đó.

  3. #3
    Ngày gia nhập
    11 2010
    Nơi ở
    hell
    Bài viết
    165

    code bạn sai rất nhiều sửa mún mập mình.
    Code:
    #include<iostream>
    #include<math.h>
    
    using namespace std;
    
    class DATE{                    // Xay dung lop DATE
          private:
              int day,month,year;
          public:
              DATE()
    		  {                  // Ham khoi tao ko doi
                  day = 0;       
                  month = 0;
                  year = 0;
              }      
              DATE(int x, int y, int z){         // Ham khoi tao co doi
                  day = x;
                  month = y;
                  year = z;         
              }
              void input_date();     // Ham nhap ngay thang nam
              void output_date();    // Ham in ngay thang nam
              int test_leapyear();    // Ham kiem tra nam nhuan
              int test_lastmonth();   // Ham kiem tra cuoi thang
              DATE add_oneday();       // Ham cong them mot ngay
              DATE sub_oneday();     // Ham tru mot ngay
    };
    
    void DATE:: input_date(){
         cout << "Day " ; cin >> day;
         cout << " Month "; cin >> month;
         cout << " Year "; cin >> year;   
    }
    
    void DATE:: output_date(){
         cout << day << " / " << month << " / " << year;     
    }
    
    int DATE::test_leapyear()
    {
    
        if(year % 4 == 0)
             return 1;
        else 
             return 0;    
    }
    
    int DATE::test_lastmonth(){
        
        switch (month)
    	{                   // Bao loi
    	case 1:
    	case 3:
    	case 5:
    	case 7:
    	case 8:
    	case 10:
    	case 12:
                  if(day == 31)
                     return 1;
                  else
                     return 0;
                  break;
        case 4:
    	case 6:
    	case 9:
    	case 11:
                  if(day == 30)
                     return 1;
                  else
                     return 0;
                  break;
        case 2:
                  if(test_leapyear())
    			  {
                      if(day == 29)
                         return 1;
                      else
                         return 0;                    
                  }
                  else{
                       if(day == 28 )
                         return 1;
                       else
                         return 0;     
                  }
                  break;
        }    
    }
    
    DATE DATE:: add_oneday()
    {
         if(test_lastmonth()){
            if(month == 12){
               day = 1;
               month = 1;
               year ++;         
            }         
            else 
               day = 1;
               month ++;            
         }     
         else
             day ++;
    	 return *this ;     
    }
    
    DATE DATE:: sub_oneday(){
         if(day == 1){
            if(month == 1){
               day = 31;
               month = 12;
               year --;        
            }        
            if(month == 2 || month == 4 || month == 6 || month == 8 || month == 9 || month == 11){
               day = 31;
               month --;
            }
            if(month == 5 || month == 7 || month == 10 || month == 12){
               day = 30;
               month --;
            }
            if(month == 3){
               if(test_leapyear())
                  day = 29;                 
               else
                  day = 28;
               month --;
            }
         else
            day --;
            
         }     
    	 return *this ;
    }
    
    int main(){
        DATE p(31,2,1992);        // Khoi tao doi tuong ngay 31/2/1992   ----- Bao loi T.T
        DATE q,h;
        p.output_date();
        q = p.add_oneday();
        cout << "Ket qua sau cong mot ngay : "; q.output_date();
        h = q.sub_oneday();
        cout << "\nKet qua sau tru mot ngay: "; h.output_date();
        system("pause");    
        return 0;
    }
    đây là code mình đã sửa hết bug.nhưng code phần sub vs add day của bạn sai hoàn toàn.
    bạn tự sửa lại ngen

  4. #4
    Ngày gia nhập
    08 2011
    Bài viết
    7

    Hị Hị, cảm ơn bạn treatmaster nhiều nhiều nhiều

  5. #5
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Không nói tới code. Giải thuật của bạn rườm rà quá.

    ngoài phương thức xuất, nhập, bạn chỉ cần các phương thức sau:

    // hàm trả về số ngày có trong một tháng
    int SoNgayTrongThang(int &thang, int &nam)

    // hàm xét xem một nhóm ba dữ liệu ngày, tháng, năm có hợp lệ hay không
    // (dùng để kiểm tra ngày nhập vào. Có nhiều cách để thực hiện hàm này, dạng dưới đây chỉ là một)
    // trả về 0 nếu ngày tháng năm hợp lệ, 1 nếu ngày không hợp lệ, 2 nếu tháng không hợp lệ, 3 nếu năm
    int NgayKhongHopLe(int &ngay, int &thang, int &nam)

    // hàm cộng 1 ngày vào ngày hiện tại
    // gọi hàm SoNgayTrongThang và so sánh với ngay để xác định xem hiện tại đang ở cuối tháng?
    // nếu chưa đến cuối tháng thì cộng 1 vào ngay
    // nếu đã đến cuối tháng thì set ngay = 1, thang++. Nếu thang > 12 thì set thang=1, nam++

    // hàm trừ 1 ngày vào ngày hiện tại
    // nếu ngay > 1 thì set ngay--
    // nếu ngay==1 thì set thang--, nếu thang<1 thì set thang=12, nam--, và
    // set ngay=SoNgayTrongThang(thang, nam)

  6. #6
    Ngày gia nhập
    08 2011
    Bài viết
    7

    Mặc định Lỗi khi xây dựng các hàm kiểm tra năm nhuận và cuối tháng với lớp Date

    Cảm ơn ban VoTichSu nhiều nhiều nhiều

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

  1. Bài tập về năm nhuận
    Gửi bởi damagacpt trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 9
    Bài viết cuối: 18-04-2015, 03:06 AM
  2. Bài tập C sử dụng switch để kiểm tra năm nhuận như thế nào?
    Gửi bởi vochanhtin 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: 06-11-2013, 08:20 PM
  3. Máy in mã ngày, máy in mã ngày tháng, máy in date, máy dập date
    Gửi bởi tuyetkt trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 24-01-2013, 03:49 PM
  4. bài toán tháng trong năm nhuận
    Gửi bởi hikaru2838 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 09-12-2012, 10:08 AM
  5. Cccc Cổ nhuế, Bán Chung cư CT3 Cổ Nhuế Căn diện tích 71m2
    Gửi bởi nguyenhabds trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 05-11-2012, 09:30 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