ブログを作る※無料・簡単アフィリ    ブログトップ | 楽天市場
073546 ランダム
ツェラーの公式 (趣味・ゲーム)楽天ブログ 【ケータイで見る】 【ログイン】
giru0116のブログ
ホーム 日記 プロフィール オークション 掲示板 ブックマーク お買い物一覧

ツェラーの公式

#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; /* 公式の結果を戻り値とする */
}
Powered By 楽天ブログは国内最大級の無料ブログサービスです。楽天・Infoseekと連動した豊富なコンテンツや簡単アフィリエイト機能、フォトアルバムも使えます。デザインも豊富・簡単カスタマイズが可能!

Copyright (c) 1997-2012 Rakuten, Inc. All Rights Reserved.