トリッキーコードネット トップへ戻る   C/C++, Java, Perl, PHP, JavaScript, アルゴリズム, ショートコーディング, IOCCCコードの解説, 等々

サイト情報

トリッキーなコード

7行プログラミング

物凄いコード集

アルゴリズム

データ構造

C/C++な話題

コードサンプル

ツール/環境構築

開発ノウハウ 等

ネタ/ジョーク集

おススメ書籍/サイト

サイトTOP >> アルゴリズム >> 任意年月日の曜日判定アルゴリズム (C言語)

曜日判定プログラミング (C言語)

任意の西暦年月日から、曜日を算出するツェラーの公式 (Zeller's congruence)なる公式が存在します。
その式を元に、任意の年月日を指定すると、曜日を返す関数を作成してみます^^;)

(ツェラーの公式の詳細はWikipediaを参照して下さい)



/*
 年、月、日を指定すると、曜日を返す。(0:日, ... 6:土)
*/
int getWeekday(int nYear, int nMonth, int nDay)
{
    int nWeekday, nTmp;

    if (nMonth == 1 || nMonth == 2) {
        nYear--;
        nMonth += 12;
    }

    nTmp     = nYear/100;
    nWeekday = (nYear + (nYear >> 2) - nTmp + (nTmp >> 2) + (13*nMonth + 8)/5 + nDay) % 7;

    return nWeekday;
}
パラメータに西暦の年月日を渡すと、曜日をあらわす 0 ~ 6 の数字が返ります。(0:日曜日, 1:月曜日, 2:火曜日, ... 6:土曜日) そして、
nWeekday = (nYear + (nYear >> 2) - nTmp + (nTmp >> 2) + (13*nMonth + 8)/5 + nDay) % 7;
の部分は、ツェラーの公式どおりならば
nWeekday = (nYear + nYear/4 - nYear/100 + nYear/400 + (13*nMonth + 8)/5 + nDay) % 7;
となりますが、 ÷4 を シフト演算子にする事で、プログラミングとしての処理を高速化 しています。 閏年(うるうどし)判定アルゴリズムと組み合わせて、カレンダーを表示させる時に使ったりします♪
ひょっとしたら参考になるかもしれないページ : 閏年(うるうどし)判定アルゴリズム  任意の年月のカレンダーを表示
         このエントリーをはてなブックマークに追加   


作業効率化・ライフハックのオススメ記事




コンピュータ・テクノロジーのオススメ記事





恋愛・人間関係のオススメ記事




※ 当サイトは、トップページからリンクで辿る事の出来るページに限り、リンクフリーです。
※ 当サイトの閲覧/利用によって生じた如何なる損害も、当サイト管理人は責任を負いません。
※ 当サイトの内容を転載される場合は、当サイトへのリンクをお願い致します。