Nhìn có vẻ dài dòng nhưng theo mình thì cũng rất dễ hiểu: Ý tưởng: - Nhập 2 ngày/tháng/năm bất ki - Lấy 1/1/1 làm mốc - Tính số ngày từ 1/1/1 đến 2 ngày vừa nhập - Trừ 2 số ngày đó sẽ được khoảng cách giữa 2 ngày/tháng/năm vừa nhập Đây là Code của mình...^^ Mã: #include <iostream> using namespace std; struct day { unsigned int ngay,thang,nam; }; int khoangcach(day a) { int t,t1,t2,t3,t4,t5,t6,t7,t8,t9; //Tru nam for(int i=1; i<=a.nam; i++) { if((i%4==0 && i%100!=0)||(i%400==0)) t4=t4+1; else t5=t5+1; t1=t4*366+t5*365; } //Tru thang for(int j=1; j<=a.thang; j++) { if(j==1||j==3||j==5||j==7||j==8||j==10||j==12) t6=t8+1; else if(j==4||j==6||j==9||j==11) t7=t9+1; else if((j%4==0 && j%100!=0)||(j%400==0)) t8=t6+1; else t9=t7+1; } t2=t6*31+t7*31+t8*29+t9*28; //Tru ngay for(int k=1;k<=a.ngay;k++) t3=t3+1; //Khoang cach t=t1+t2+t3; return t; } void main() { day day1,day2; cout<<"Nhap ngay thang nam 1..."<<endl; cout<<"Nhap ngay...:"; cin>>day1.ngay; cout<<"Nhap thang...:"; cin>>day1.thang; cout<<"Nhap nam...:"; cin>>day1.nam; cout<<endl; cout<<"Nhap ngay thang nam 2..."<<endl; cout<<"Nhap ngay...:"; cin>>day2.ngay; cout<<"Nhap thang...:"; cin>>day2.thang; cout<<"Nhap nam...:"; cin>>day2.nam; cout<<"2 nam sau khi nhap"<<endl; cout<<"Nam 1:"<<day1.ngay<<"/"<<day1.thang<<"/"<<day1.nam<<endl; cout<<"Nam 2:"<<day2.ngay<<"/"<<day2.thang<<"/"<<day2.nam<<endl; cout<<"Khoang cach nam 1 va nam 2 \t"<<khoangcach(day2)-khoangcach(day1)<<"ngay"<<endl; }
đã yếu rồi còn ra gió́! lập trình không đúng thì đừng có post lên! sai bét nè: thử ví dụ tính 2 ngày này coi: 23/02/2011 và 31/02/2011.
ở đây mình chưa kiểm tra điều kiện nhập: Đơn giản ở đây là muốn kiểm tra cách tính số ngày giữa 2 ngày bất kì Đây là đoạn kiểm tra điều kiện nhập: Mã: bool kt_ngay(int nam, int thang, int ngay) { if((nam%4==0 && nam%100!=0)||(nam%400==0)) if(thang==2) if(ngay==29) return true; else return false; } void nhap(day d) { cout<<"Nhap ngay"; cin>>d.ngay; cout<<"Nhap thang"; cin>>d.thang; cout<<"Nhap nam;"; cin>>d.nam; while(d.ngay>31 || d.thang>12 || kt_ngay(d.nam, d.thang, d.ngay)==false) { cout<<"Nhap lai..."<<endl; cin>>d.ngay>>d.thang>>d.nam; } } void main() { day day1,day2; cout<<"Nhap ngay/thang/nam 1:"<<endl; nhap(day1); cout<<"Nhap ngay/thang/nam 2:"<<endl; nhap(day2); cout<<"2 nam sau khi nhap"<<endl; cout<<"Nam 1:"<<day1.ngay<<"/"<<day1.thang<<"/"<<day1.nam<<endl; cout<<"Nam 2:"<<day2.ngay<<"/"<<day2.thang<<"/"<<day2.nam<<endl; cout<<"Khoang cach nam 1 va nam 2 \t"<<khoangcach(day2)-khoangcach(day1)<<"ngay"<<endl; } @tdhung2106:làm rồi thì share cho mọi người với nào ^^
Code nên căn tab và bỏ trong thẻ [code cho dễ nhìn. Lấy khoảng thời gian từ đầu năm đến tháng thứ nhất trừ khoảng thời gian từ đầu năm đến tháng thứ 2 là ra khoảng cách giữa 2 tháng. Điều kiện là tháng lớn hơn mới trừ được tháng nhỏ hơn. xét đoạn sau: Mã: m1>m2 ? (max=m1,min=m2):(max=m2,min=m1); Tham khảo code của mình: Mã: #include <iostream> using namespace std; typedef struct { int day; int month; int year; } date_time; date_time today; ///kiem tra nam nhuan bool check_year(int year) { if((year%400==0)||(year%4==0 && year%100!=0)) return true; else return false; } ///tra ve so ngay cua 1 nam int day_of_year(int year) { if(check_year(year)==true) return 366; else return 365; } ///tra ve so ngay cua 1 thang int day_of_month(int month,int year) { switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; break; case 4: case 6: case 9: case 11: return 30; break; case 2: { if(check_year(year)==true) return 29; else return 28; } break; default: return 0; break; } } ///tinh so ngay da qua tu dau nam nay. Khong tinh nam int time_until_now(int day,int month,int year) { if(day>31 || day < 1 || month > 12 || month < 1) return 0; int sum_month=0; for(int i=0; i<month; i++) sum_month+=day_of_month(i,year); return sum_month+day; ///tra ve so ngay + so ngay cua tung thang } ///tinh khoang cach giua 2 thang int time_between_month() { int max,min,m1,m2; cout<<"Enter two months : "<<endl; cin>>m1>>m2; m1>m2 ? (max=m1,min=m2):(max=m2,min=m1); cout<<"Day between two month: "<<time_until_now(0,max,1)-time_until_now(0,min,1)<<endl; } main() { int d,m,y; cout<<"Enter Day Month Year: "<<endl; cin>>today.day>>today.month>>today.year; ///so ngay da qua tu 1/1/1 tinh dem ngay thang nam vua nhap cout<<"Time until now: "<<time_until_now(today.day,today.month,today.year)<<endl; /// ///tinh so ngay cua tung nam tu nam 1 den nam ngay nhap vao int sum_year=0; for(int i=0; i<today.year; i++) sum_year+=day_of_year(i); /// ///so ngay trong nam nay + so ngay tu ngay 1 den dau nam nay cout<<"Time from 1/1/1: "<<sum_year+time_until_now(today.day,today.month,today.year)<<endl; /// ///nhap 2 thang bat ky, tra ve so ngay giua 2 thang time_between_month(); /// }
Đú thêm cái ... ko có phần kiểm tra dk: Mã: void c7(ngaytn b[]) { cout<<"nhap ngay: ";cin>>b[0].ngay; cout<<"nhap thang: ";cin>>b[0].thang; cout<<"nhap nam: ";cin>>b[0].nam; cout<<"nhap ngay: ";cin>>b[1].ngay; cout<<"nhap thang: ";cin>>b[1].thang; cout<<"nhap nam: ";cin>>b[1].nam; int ngayt=0; for(int i=b[0].nam+1;i<b[1].nam;i++) { if((i%400==0)||((i%4==0)&&(i%100!=0))) ngayt=ngayt+366; else ngayt=ngayt+365; } for(int i=1;i<b[1].thang;i++) { if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) ngayt=ngayt+31; else if (i==2) ngayt=ngayt+28; else ngayt=ngayt+30; } for(int i=b[0].thang+1;i<=12;i++) { if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) ngayt=ngayt+31; else if (i==2) ngayt=ngayt+28; else ngayt=ngayt+30; } if(((b[0].nam%400==0)||((b[0].nam%4==0)&&(b[0].nam%100!=0)))&&(b[0].thang<3)) ngayt=ngayt+1; if(((b[1].nam%400==0)||((b[1].nam%4==0)&&(b[1].nam%100!=0)))&&(b[1].thang>2)) ngayt=ngayt+1; if(b[0].thang==1||b[0].thang==3||b[0].thang==5||b[0].thang==7||b[0].thang==8||b[0].thang==10||b[0].thang==12) ngayt=ngayt+31-b[0].ngay; else if (b[0].thang==2) ngayt=ngayt+28-b[0].ngay; else ngayt=ngayt+30-b[0].ngay; ngayt=ngayt+b[1].ngay-1; }