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

サイト情報

トリッキーなコード

7行プログラミング

物凄いコード集

アルゴリズム

データ構造

C/C++な話題

コードサンプル

ツール/環境構築

開発ノウハウ 等

ネタ/ジョーク集

おススメ書籍/サイト

サイトTOP >> アルゴリズム >> 任意年月のカレンダー表示 (C言語)

カレンダー表示(描画)プログラミング (C言語)

閏年(うるうどし)判定アルゴリズムと、曜日判定アルゴリズムを使用し、任意の年月のカレンダーを表示(描画)するプログラミングです。



 1 : #include <stdio.h>
 2 :
 3 : /*
 4 :  年、月を指定すると、該当年月の最終日を返す。
 5 : */
 6 : int getMonthDays(int nYear, int nMonth)
 7 : {
 8 :     int nMonthDays;
 9 :
10 :     if (nMonth == 2) {
11 :         if (nYear % 4 == 0  &&  nYear % 100 != 0  ||  nYear % 400 == 0) {
12 :             nMonthDays = 29;
13 :         }
14 :         else {
15 :             nMonthDays = 28;
16 :         }
17 :     }
18 :     else if (nMonth == 4 || nMonth == 6 || nMonth == 9 || nMonth == 11) {
19 :         nMonthDays = 30;
20 :     }
21 :     else{
22 :         nMonthDays = 31;
23 :     }
24 :
25 :     return nMonthDays;
26 : }
27 :
28 : /*
29 :  年、月、日を指定すると、曜日を返す。(0:日, ... 6:土)
30 : */
31 : int getWeekday(int nYear, int nMonth, int nDay)
32 : {
33 :     int nWeekday, nTmp;
34 :
35 :     if (nMonth == 1 || nMonth == 2) {
36 :         nYear--;
37 :         nMonth += 12;
38 :     }
39 :
40 :     nTmp     = nYear/100;
41 :     nWeekday = (nYear + (nYear >> 2) - nTmp + (nTmp >> 2) + (13*nMonth + 8)/5 + nDay) % 7;
42 :
43 :     return nWeekday;
44 : }
45 :
46 : void printCalendar(int nYear, int nMonth)
47 : {
48 :     int i,day;
49 :     int nMonthDays = getMonthDays(nYear, nMonth);
50 :     int nWeekday   = getWeekday(nYear, nMonth, 1);
51 :
52 :     for (i = 0; i < nWeekday; i++) {
53 :         printf("   ");
54 :     }
55 :
56 :     for (day = 1; day <= nMonthDays; day++, i++) {
57 :         printf(" %2d", day);
58 :
59 :         if (i % 7 == 6 && day != nMonthDays) {
60 :             puts("");
61 :         }
62 :     }
63 :     puts("");
64 : }
65 :
66 : int main(void)
67 : {
68 :     int nYear, nMonth;
69 :
70 :     puts("[年 月]を入力して下さい。");
71 :     scanf("%d %d", &nYear, &nMonth);
72 :
73 :     printCalendar(nYear, nMonth);
74 :     return 0;
75 : }
実行結果) カレンダー表示プログラミング結果
ひょっとしたら参考になるかもしれないページ : 閏年(うるうどし)判定アルゴリズム  任意の年月のカレンダーを表示
         このエントリーをはてなブックマークに追加   


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




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





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




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