Advertisement
thienlang

day

Sep 27th, 2013
338
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.96 KB | None | 0 0
  1. class Ngay{
  2.     int day;
  3.     int month;
  4.     int year;
  5. ...
  6. };
  7.  
  8.  
  9. //Tìm ngày trước đó K ngày.
  10. // Trả về ngày trước đó K ngày
  11. Ngay Ngay::Before_Day( int K )
  12. {
  13.     Ngay Bef(day,month,year);
  14.    
  15.  
  16.  
  17.     while ( Bef.day <= K) //và khi ngược lại
  18.     {
  19.         K = K - Bef.day; //trừ số ngày ra sao cho trờ về đầu tháng ( cuối tháng trước)
  20.         if ( Bef.month == 1) //nếu đó là tháng 1.
  21.         {
  22.             Bef.month = 12; //đặt lại ngày tháng của cuối năm trước
  23.             Bef.year--;
  24.             Bef.day = 31;
  25.             continue; //tiếp tục vòng lặp
  26.         }
  27.         else
  28.             Bef.month  = Bef.month - 1; //nếu không phải thì trở về tháng trước
  29.  
  30.         //xem tháng trước là tháng mấy, có bao nhiêu ngày.
  31.         Bef.day = Day_in_Month(Bef.month,Bef.year);
  32.     }
  33.  
  34.     if ( Bef.year <= 0 )
  35.     {
  36.         Bef.day = 1;
  37.         Bef.month = 1;
  38.         Bef.year = 1;
  39.     }
  40.  
  41.     //nếu ngày > ngày giảm
  42.     if ( Bef.day > K)
  43.     {
  44.         Bef.day = Bef.day - K; //trừ ngày ra
  45.         return Bef;
  46.     }
  47.  
  48.     return Bef;
  49. }
  50.  
  51.  
  52. //Tìm ngày sau đó K ngày
  53. //Trả về ngày sau K ngày
  54. Ngay Ngay::After_Day ( int K )
  55. {
  56.     Ngay Af(day,month,year);
  57.  
  58.     int STT = Af.Day_in_Year(); //tìm thứ tự ngày từ đầu năm
  59.    
  60.     K = K + STT; //Tăng số lượng ngày cộng
  61.     Af.day = 1;
  62.     Af.month = 1; //Đưa Af về đầu năm
  63.  
  64.     //Tính theo năm. Lượng ngày cộng có lớn hơn ngày của 1 năm không
  65.     while ( K > 365 )
  66.     {
  67.         if (Test_Leap_Year(Af.year))
  68.             K = K - 366;
  69.         else
  70.             K = K - 365;
  71.  
  72.         Af.year++; //Nếu có thì tăng năm. và giảm lượng ngày cộng xuống
  73.     }
  74.  
  75.     //Lượng ngày cộng còn lại có nhiều hơn số ngày của tháng không. bắt đầu từ tháng 1
  76.     while ( K > Day_in_Month(Af.month,Af.year))
  77.     {
  78.         K = K - Day_in_Month(Af.month,Af.year);
  79.         Af.month++; //Nếu có thì tăng tháng
  80.     }
  81.  
  82.     if ( K != 0 )
  83.     {
  84.         Af.day = K; //Nếu lượng ngày cộng lớn hơn 0, tức là sẽ là ngày thứ đó của tháng sau
  85.     }
  86.  
  87.     return Af;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement