Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.27 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. typedef struct week {
  6. int daynr;
  7. char dayname[30];
  8. int nr_of_times_13;
  9. } week;
  10.  
  11.  
  12. int main () {
  13.  
  14. week days[] = {
  15. {1,"monday",0},
  16. {2,"tuesday",0},
  17. {3,"wednesday",0},
  18. {4,"thursday",0},
  19. {5,"friday",0},
  20. {6,"saturday",0},
  21. {7,"sunday",0}
  22. };
  23.  
  24. int firstdayofyear = 1; // 1900
  25. int month_13th_day;
  26. int year;
  27. int isleapyear;
  28. int leapyear[] = {31,29,31,30,31,30,31,31,30,31,30,31};
  29. int normalyear[] = {31,28,31,30,31,30,31,31,30,31,30,31};
  30. int (*pty)[];
  31.  
  32. FILE *fr,*fw;
  33. int period,m;
  34.  
  35.  
  36. // read file friday.in
  37. fr = fopen ("friday.in", "r");
  38.  
  39. // check if file exists
  40. if ( !fr ) {
  41. puts("Unable to open friday.in");
  42. exit(1);
  43. }
  44.  
  45. fscanf(fr, "%d", &period );
  46.  
  47. for (year=1900; year<=(1900+period-1);year++) {
  48.  
  49. if ( year%100 == 0 ) { // century year
  50. if ( year%400 == 0 ) {
  51. // leap year
  52. pty=&leapyear;
  53. isleapyear=1;
  54. } else {
  55. pty=&normalyear;
  56. isleapyear=0;
  57. }
  58. } else if ( (year%4 == 0) ) { // not century year
  59. // leap year
  60. pty=&leapyear;
  61. isleapyear=1;
  62. } else {
  63. pty=&normalyear;;
  64. isleapyear=0;
  65. }
  66.  
  67. // determine weekday of januari 13
  68. switch (firstdayofyear) {
  69.  
  70. case 1: // mon -> sat
  71. days[5].nr_of_times_13+=1;
  72. month_13th_day=6;
  73. break;
  74. case 2: // tue -> sun
  75. days[6].nr_of_times_13+=1;
  76. month_13th_day=7;
  77. break;
  78. case 3: // wed -> mon
  79. days[0].nr_of_times_13+=1;
  80. month_13th_day=1;
  81. break;
  82. case 4: // tue -> tue
  83. days[1].nr_of_times_13+=1;
  84. month_13th_day=2;
  85. break;
  86. case 5: // fri -> wed
  87. days[2].nr_of_times_13+=1;
  88. month_13th_day=3;
  89. break;
  90. case 6: // sat -> thu
  91. days[3].nr_of_times_13+=1;
  92. month_13th_day=4;
  93. break;
  94. case 7: // sun -> fri
  95. days[4].nr_of_times_13+=1;
  96. month_13th_day=5;
  97. break;
  98. }
  99.  
  100.  
  101. // if a month is 31, next month weekday will be 3 days further
  102. // if a month is 30, next month weekday will be 2 days further
  103. // if a month is 29, next month weekday will be 1 days further
  104. // if a month is 28, next month weekday will be the same
  105. // normal year, next year first weekday will be 1 day further
  106. // leap year, next year first weekday will be 2 days further
  107.  
  108.  
  109. for (m=0;m<11;m++) {
  110. //printf("%d - ", (*pty)[m]);
  111.  
  112. switch ( (*pty)[m] ) {
  113.  
  114. case 31:
  115. month_13th_day+=3;
  116. break;
  117. case 30:
  118. month_13th_day+=2;
  119. break;
  120. case 29:
  121. month_13th_day+=1;
  122. break;
  123. }
  124.  
  125. if (month_13th_day > 7 ) month_13th_day-=7;
  126.  
  127. days[month_13th_day-1].nr_of_times_13+=1;
  128.  
  129. } // for
  130.  
  131.  
  132. if (isleapyear) firstdayofyear+=2;
  133. else firstdayofyear+=1;
  134.  
  135. if (firstdayofyear > 7 ) firstdayofyear-=7;
  136.  
  137. } // for
  138.  
  139. /*
  140. for (m=0;m<7;m++ ) {
  141. printf("%s: %d\n", days[m].dayname,days[m].nr_of_times_13);
  142. }
  143. */
  144.  
  145. fw = fopen("friday.out","w");
  146.  
  147. if ( !fw ) {
  148. puts("Unable to write to friday.out");
  149. exit(1);
  150. }
  151.  
  152. fprintf(fw, "%d %d %d %d %d %d %d\n" ,
  153. days[5].nr_of_times_13,
  154. days[6].nr_of_times_13,
  155. days[0].nr_of_times_13,
  156. days[1].nr_of_times_13,
  157. days[2].nr_of_times_13,
  158. days[3].nr_of_times_13,
  159. days[4].nr_of_times_13
  160. );
  161.  
  162. fclose(fr);
  163. fclose(fw);
  164.  
  165. return 0;
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement