Guest User

Untitled

a guest
Jun 13th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.29 KB | None | 0 0
  1. #include <iomanip>
  2. #include <iostream>
  3. #include <cmath>
  4. #include <cstdlib>
  5.  
  6. using namespace std;
  7.  
  8.  
  9. const string day_names[7] = {"Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
  10.  
  11. const string day_short[7] = {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"};
  12. const int days_month[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  13.  
  14. bool is_leapyear(int year)
  15. {
  16.  
  17. if(((year%4==0 && year%100 != 0) || (year%400 == 0)) || year < 1537) {
  18. return true;
  19. }
  20. return false;
  21.  
  22.  
  23. }
  24.  
  25.  
  26. int wday_jul(int day, int month, int year) {
  27.  
  28. int hjul;
  29.  
  30. hjul = day;
  31. hjul += floor((month+1)*26/10);
  32. hjul += year % 100;
  33. hjul += floor((year%100)/4);
  34. hjul += 5;
  35. hjul -= floor(year/100);
  36. hjul %= 7;
  37.  
  38. // swap
  39. return (hjul+6)%7;
  40. }
  41.  
  42.  
  43.  
  44. int wday_greg(int day, int month, int year) {
  45.  
  46.  
  47. int hgreg;
  48.  
  49. hgreg = day;
  50. hgreg += floor((month+1)*26/10);
  51. hgreg += year % 100;
  52. hgreg += floor((year%100)/4);
  53. hgreg += floor(floor(year/100)/4);
  54. hgreg -= 2*(floor(year/100));
  55. hgreg %= 7;
  56.  
  57. // swap
  58. return (hgreg+6)%7;
  59.  
  60. }
  61.  
  62.  
  63. int weekday(int day, int month, int year) {
  64.  
  65. int orig_year = year;
  66. int orig_month = month;
  67.  
  68. if(month==1) {
  69. month = 13;
  70. year--;
  71. } else if(month==2) {
  72. month = 14;
  73. year--;
  74. }
  75.  
  76.  
  77. if(orig_year == 1582)
  78. {
  79. if(orig_month == 10)
  80. {
  81. if(day <= 4)
  82. return wday_jul(day, month, year);
  83. if(day >= 15)
  84. return wday_greg(day,month, year);
  85. else
  86. return wday_greg(15, month, year);
  87.  
  88. }
  89. else if(orig_month < 10)
  90. {
  91. return wday_jul(day, month, year);
  92. }
  93. else
  94. {
  95. return wday_greg(day, month, year);
  96. }
  97. }
  98. else if(orig_year < 1582)
  99. {
  100. return wday_jul(day, month, year);
  101. }
  102. else
  103. {
  104. return wday_greg(day, month, year);
  105. }
  106.  
  107.  
  108.  
  109. }
  110.  
  111.  
  112. int* days_of_month(int month, int year) {
  113.  
  114. int* days = new int[31];
  115.  
  116. for(int i=0;i<31;i++) { days[i] = 0; }
  117.  
  118. if(year < 1582 || (year == 1582 && month < 10)) {
  119. for(int i=0;i<days_month[month-1];i++) {
  120. days[i] = i+1;
  121. }
  122. }
  123. else if(year > 1582 || (year==1582 && month > 10)) {
  124.  
  125. // feb has 28 days
  126. if(month == 2 && !is_leapyear(year)) {
  127. for(int i=0;i<28;i++) {
  128. days[i] = i+1;
  129. }
  130. }
  131. else
  132. {
  133. for(int i=0;i<days_month[month-1];i++) {
  134. days[i] = i+1;
  135. }
  136. }
  137. }
  138. else
  139. {
  140. for(int i=0;i<days_month[month-1];i++) {
  141.  
  142. if((i+1) <= 4 || (i+1) >= 15) {
  143. days[i] = i+1;
  144. }
  145. else
  146. {
  147. days[i] = 0;
  148. }
  149. }
  150. }
  151.  
  152. return days;
  153.  
  154. }
  155.  
  156. void print_cal(int day, int month, int year) {
  157.  
  158.  
  159. for(int i=0;i<7;i++) {
  160. cout<<setw(3)<<left<<day_short[i];
  161. }
  162.  
  163. cout<<endl;
  164.  
  165. int wday;
  166. int mday;
  167.  
  168. int* days = days_of_month(month, year);
  169.  
  170. for(int i=0;i<31;i++) {
  171.  
  172. mday = days[i];
  173.  
  174. if(mday == 0) { continue; }
  175.  
  176. wday = weekday(mday, month, year);
  177.  
  178. if(mday==1)
  179. {
  180. for(int j=0;j<wday;j++) {
  181. cout<<setw(3)<<" ";
  182. }
  183. }
  184.  
  185.  
  186. if(mday == day)
  187. {
  188. cout<<"\033[37;40m"<<setw(3)<<mday<<"\033[0m";
  189. }
  190. else
  191. {
  192. cout<<setw(3)<<mday;
  193. }
  194.  
  195.  
  196. if(wday==6) {
  197. cout<<endl;
  198. }
  199.  
  200. }
  201.  
  202. cout<<endl;
  203.  
  204.  
  205. }
  206.  
  207. int main(int argc, char* argv[])
  208. {
  209.  
  210. int year;
  211. int month;
  212. int day;
  213.  
  214. day = atoi(argv[1]);
  215. month = atoi(argv[2]);
  216. year = atoi(argv[3]);
  217.  
  218.  
  219. print_cal(day, month, year);
  220.  
  221.  
  222. return 0;
  223. }
Add Comment
Please, Sign In to add comment