Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iomanip>
- #include <iostream>
- #include <cmath>
- #include <cstdlib>
- using namespace std;
- const string day_names[7] = {"Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
- const string day_short[7] = {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"};
- const int days_month[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- bool is_leapyear(int year)
- {
- if(((year%4==0 && year%100 != 0) || (year%400 == 0)) || year < 1537) {
- return true;
- }
- return false;
- }
- int wday_jul(int day, int month, int year) {
- int hjul;
- hjul = day;
- hjul += floor((month+1)*26/10);
- hjul += year % 100;
- hjul += floor((year%100)/4);
- hjul += 5;
- hjul -= floor(year/100);
- hjul %= 7;
- // swap
- return (hjul+6)%7;
- }
- int wday_greg(int day, int month, int year) {
- int hgreg;
- hgreg = day;
- hgreg += floor((month+1)*26/10);
- hgreg += year % 100;
- hgreg += floor((year%100)/4);
- hgreg += floor(floor(year/100)/4);
- hgreg -= 2*(floor(year/100));
- hgreg %= 7;
- // swap
- return (hgreg+6)%7;
- }
- int weekday(int day, int month, int year) {
- int orig_year = year;
- int orig_month = month;
- if(month==1) {
- month = 13;
- year--;
- } else if(month==2) {
- month = 14;
- year--;
- }
- if(orig_year == 1582)
- {
- if(orig_month == 10)
- {
- if(day <= 4)
- return wday_jul(day, month, year);
- if(day >= 15)
- return wday_greg(day,month, year);
- else
- return wday_greg(15, month, year);
- }
- else if(orig_month < 10)
- {
- return wday_jul(day, month, year);
- }
- else
- {
- return wday_greg(day, month, year);
- }
- }
- else if(orig_year < 1582)
- {
- return wday_jul(day, month, year);
- }
- else
- {
- return wday_greg(day, month, year);
- }
- }
- int* days_of_month(int month, int year) {
- int* days = new int[31];
- for(int i=0;i<31;i++) { days[i] = 0; }
- if(year < 1582 || (year == 1582 && month < 10)) {
- for(int i=0;i<days_month[month-1];i++) {
- days[i] = i+1;
- }
- }
- else if(year > 1582 || (year==1582 && month > 10)) {
- // feb has 28 days
- if(month == 2 && !is_leapyear(year)) {
- for(int i=0;i<28;i++) {
- days[i] = i+1;
- }
- }
- else
- {
- for(int i=0;i<days_month[month-1];i++) {
- days[i] = i+1;
- }
- }
- }
- else
- {
- for(int i=0;i<days_month[month-1];i++) {
- if((i+1) <= 4 || (i+1) >= 15) {
- days[i] = i+1;
- }
- else
- {
- days[i] = 0;
- }
- }
- }
- return days;
- }
- void print_cal(int day, int month, int year) {
- for(int i=0;i<7;i++) {
- cout<<setw(3)<<left<<day_short[i];
- }
- cout<<endl;
- int wday;
- int mday;
- int* days = days_of_month(month, year);
- for(int i=0;i<31;i++) {
- mday = days[i];
- if(mday == 0) { continue; }
- wday = weekday(mday, month, year);
- if(mday==1)
- {
- for(int j=0;j<wday;j++) {
- cout<<setw(3)<<" ";
- }
- }
- if(mday == day)
- {
- cout<<"\033[37;40m"<<setw(3)<<mday<<"\033[0m";
- }
- else
- {
- cout<<setw(3)<<mday;
- }
- if(wday==6) {
- cout<<endl;
- }
- }
- cout<<endl;
- }
- int main(int argc, char* argv[])
- {
- int year;
- int month;
- int day;
- day = atoi(argv[1]);
- month = atoi(argv[2]);
- year = atoi(argv[3]);
- print_cal(day, month, year);
- return 0;
- }
Add Comment
Please, Sign In to add comment