ツェラーの公式
#include<stdio.h>
int zeller(int, int, int);
/* ツェラーの公式の処理をする関数のプロトタイプ宣言 */
#define WEEK 7 /* 1週間は7日なので */
#define MAXMOJI 10 /* 最大文字数 */
int main()
{
int kekka, year, month, day;
char buffer[MAXMOJI], weekday[WEEK][MAXMOJI] = {
"日曜日",
"月曜日",
"火曜日",
"水曜日",
"木曜日",
"金曜日",
"土曜日"
}; /* 結果として0が日曜、1が月曜、…6が土曜なので
日曜が一番最初としてあります */
printf("ツェラーの公式プログラム\n\n");
printf("何年の何月何日の曜日が知りたいかを入力して下さい\n");
printf("何年かを入力して下さい--->");
fgets(buffer, sizeof(buffer), stdin);
sscanf(buffer, "%d", &year);
printf("何月かを入力して下さい--->");
fgets(buffer, sizeof(buffer), stdin);
sscanf(buffer, "%d", &month);
printf("何日かを入力して下さい--->");
fgets(buffer, sizeof(buffer), stdin);
sscanf(buffer, "%d", &day);
kekka = zeller(year, month, day);
/* 引数として年、月、日を渡す */
printf("\n%d年%d月%d日は%sです\n", year, month, day, weekday[kekka]);
/* weekday[kekka]はkekkaが0とすると日曜日となります(二十一章参照) */
return 0;
}
int zeller(int y, int m, int d)
{
int value;
if(m == 1 || m == 2) {
--y; /* 1,2月は前の年の13,14月として扱うため1年戻すために-1をする */
m += 12; /* 1,2月は前の年の13,14月として扱うため12を足す */
}
value = (y + y / 4 - y / 100 + y / 400 + (13 * m + 8) / 5 + d) % 7;
/* (年 + 年 / 4 - 年 / 100 + 年 / 400 + (13 * 月 + 8) / 5 + 日)
を7で割った余りというツェラーの公式そのもの */
return value; /* 公式の結果を戻り値とする */
}
|