The Office Uchida, School of Computer

コンピュータを学習する人の学校:パソコンキャンパス、プログラミングキャンパス
ホームCプログラマ徹底養成コース中級コース 第5問
文字の拡大

中級コース 第5問:万年カレンダー

問題:西暦年と月を入力し、その月のカレンダーを表示するプログラムを作成して下さい。

参考のため、実行結果例を示します。

西暦年をどうぞ>>>2006
月をどうぞ>>>6
2006 年  6 月 カレンダー
  日  月  火  水  木  金  土
                   1   2   3
   4   5   6   7   8   9  10
  11  12  13  14  15  16  17
  18  19  20  21  22  23  24
  25  26  27  28  29  30
西暦年をどうぞ>>>2008
月をどうぞ>>>2
2008 年  2 月 カレンダー
  日  月  火  水  木  金  土
                       1   2
   3   4   5   6   7   8   9
  10  11  12  13  14  15  16
  17  18  19  20  21  22  23
  24  25  26  27  28  29

この問題のポイントは、(1) 各月の曜日をどのように求めるか、(2)閏年をどのように判定するか、 (3)カレンダーそのものをどのようにして求めるか、という点です。

曜日を求めるには、ゼラーの公式を使います。閏年は、4年に一度ではなく、もう少し複雑な判定手順があります。 カレンダーを求めるには、for文をうまく使いこなす必要があります。


学習ポイント
  1. ループのプログラムの書き方に慣れる
  2. 面倒な処理手順を簡潔に書けるようにする

本問題に対するFAQ

質問1:このプログラムで対象とするカレンダーの年数はどのくらいですか。

 現在、私たちが使っているカレンダーはグレゴリー暦によるもので、ここで扱うカレンダーも グレゴリー暦に沿っています。これは中世以降のものですから、せいぜい、1600年から3000年くらいまでで結構です。

質問2:ゼラーの公式って何ですか。

 第1ヒントに示しています。

質問3:閏年の規則を教えて下さい。

 第1ヒントに示しています。