Có thể do thuộc tính private hay public gì đó....
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; }
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ẻ đó.
code bạn sai rất nhiều sửa mún mập mình.
đâ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.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; }
bạn tự sửa lại ngen
Hị Hị, cảm ơn bạn treatmaster nhiều nhiều nhiều
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)
Cảm ơn ban VoTichSu nhiều nhiều nhiều