Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct week {
- int daynr;
- char dayname[30];
- int nr_of_times_13;
- } week;
- int main () {
- week days[] = {
- {1,"monday",0},
- {2,"tuesday",0},
- {3,"wednesday",0},
- {4,"thursday",0},
- {5,"friday",0},
- {6,"saturday",0},
- {7,"sunday",0}
- };
- int firstdayofyear = 1; // 1900
- int month_13th_day;
- int year;
- int isleapyear;
- int leapyear[] = {31,29,31,30,31,30,31,31,30,31,30,31};
- int normalyear[] = {31,28,31,30,31,30,31,31,30,31,30,31};
- int (*pty)[];
- FILE *fr,*fw;
- int period,m;
- // read file friday.in
- fr = fopen ("friday.in", "r");
- // check if file exists
- if ( !fr ) {
- puts("Unable to open friday.in");
- exit(1);
- }
- fscanf(fr, "%d", &period );
- for (year=1900; year<=(1900+period-1);year++) {
- if ( year%100 == 0 ) { // century year
- if ( year%400 == 0 ) {
- // leap year
- pty=&leapyear;
- isleapyear=1;
- } else {
- pty=&normalyear;
- isleapyear=0;
- }
- } else if ( (year%4 == 0) ) { // not century year
- // leap year
- pty=&leapyear;
- isleapyear=1;
- } else {
- pty=&normalyear;;
- isleapyear=0;
- }
- // determine weekday of januari 13
- switch (firstdayofyear) {
- case 1: // mon -> sat
- days[5].nr_of_times_13+=1;
- month_13th_day=6;
- break;
- case 2: // tue -> sun
- days[6].nr_of_times_13+=1;
- month_13th_day=7;
- break;
- case 3: // wed -> mon
- days[0].nr_of_times_13+=1;
- month_13th_day=1;
- break;
- case 4: // tue -> tue
- days[1].nr_of_times_13+=1;
- month_13th_day=2;
- break;
- case 5: // fri -> wed
- days[2].nr_of_times_13+=1;
- month_13th_day=3;
- break;
- case 6: // sat -> thu
- days[3].nr_of_times_13+=1;
- month_13th_day=4;
- break;
- case 7: // sun -> fri
- days[4].nr_of_times_13+=1;
- month_13th_day=5;
- break;
- }
- // if a month is 31, next month weekday will be 3 days further
- // if a month is 30, next month weekday will be 2 days further
- // if a month is 29, next month weekday will be 1 days further
- // if a month is 28, next month weekday will be the same
- // normal year, next year first weekday will be 1 day further
- // leap year, next year first weekday will be 2 days further
- for (m=0;m<11;m++) {
- //printf("%d - ", (*pty)[m]);
- switch ( (*pty)[m] ) {
- case 31:
- month_13th_day+=3;
- break;
- case 30:
- month_13th_day+=2;
- break;
- case 29:
- month_13th_day+=1;
- break;
- }
- if (month_13th_day > 7 ) month_13th_day-=7;
- days[month_13th_day-1].nr_of_times_13+=1;
- } // for
- if (isleapyear) firstdayofyear+=2;
- else firstdayofyear+=1;
- if (firstdayofyear > 7 ) firstdayofyear-=7;
- } // for
- /*
- for (m=0;m<7;m++ ) {
- printf("%s: %d\n", days[m].dayname,days[m].nr_of_times_13);
- }
- */
- fw = fopen("friday.out","w");
- if ( !fw ) {
- puts("Unable to write to friday.out");
- exit(1);
- }
- fprintf(fw, "%d %d %d %d %d %d %d\n" ,
- days[5].nr_of_times_13,
- days[6].nr_of_times_13,
- days[0].nr_of_times_13,
- days[1].nr_of_times_13,
- days[2].nr_of_times_13,
- days[3].nr_of_times_13,
- days[4].nr_of_times_13
- );
- fclose(fr);
- fclose(fw);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement