• ベストアンサー

教えて下さい

「20xx年における誕生日は何曜日か?2002年の曜日と20xx年の曜日をPrintせよ。」という問題があります。xxにどんな数字でもいれても曜日が求められるプログラムを教えて下さい。閏年があるのでどうやればいいかわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

参考にしてください。 xxに入る数字は、00~99ですので、基準と成る誕生日は、 2000年の誕生日を使います。 閏年は、4年に1回、ただし末が00になる年は除きます。 従って、(xx/4)の整数部分が、xx年までの閏年の回数となります。この整数部分をAとします。(2000年は、末が00なので閏年ではありません) となると、 (XX*365+A)/7の余りで曜日が求められます。 余り0の時:基準の日の曜日と同じ 余り1の時:基準の日の曜日の次の曜日    ・    ・ 余り6の時:基準の日の曜日の六つ後の曜日 となります。 ※ 注意すべき点は、1月と2月の誕生日の場合は、 閏年のチェックで、xxが、閏年の場合は、日数をプラスしてはいけません。(閏年の2月29日が過ぎていないと、日数をプラスする必要がありませんから) 2002年の曜日は、上記の式で求めても良いし、 PGM内に固定で持っても良いと思います。 例 基準日:2000年7月1日(土) 求める年:2009年とすると (2009-2000)/4=2.25 なので、2009年までの閏年の回数は、2回です。 さらに (09*365+2)/7=463あまり4となるので 土曜日の四つ後ろの曜日で水曜日と成ります。 p(^-^q=p^-^)qガンバッ 

その他の回答 (3)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.4

参考URLに、「年月日から曜日を求める」というプログラムが紹介されています。 (下側の「ツェラーの公式」を使ったもの。) 言語はPerlで書かれていますが、非常に簡単なプログラムなのでどんな言語にも容易に移植できると思います。 一応Cで書き直すとこんな感じ。 int getwday(int year, int mon, int mday) {   if (mon == 1 || mon == 2) {     year--;     mon += 12;   }   return (year + (year / 4) - (year / 100) + (year / 400)     + ((13 * mon + 8) / 5) + mday) % 7; } 引数に年,月,日を入れると、曜日が数字で求まります。 (日:0,~,土:6) No.2の方がうるう年の定義についてかかれていますが、正しくは ・4の倍数の年はうるう年 ・100の倍数年はうるう年ではない ・400の倍数年はうるう年 となります。 複数の条件に該当する場合は下の条件が優先されますので、2000年はうるう年です。

参考URL:
http://www.din.or.jp/~ohzaki/perl.htm#Date2WDay
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

(1)プログラム言語は何を使うのですか。   勉強している言語と参考までにバージョン番号。 (2)考える筋道(ロジック)だけで良いのですか。 (3)質問文を読むと、「2002年の曜日と20xx年の曜日をPrintせよ。」 とありますが、全部の日について印刷する(多分月別カレンダー 形式?)のか、その年の誕生日の曜日を印刷するのかあいまいです。 (4)結局、A.年(西暦)を指定して、その1年分の月別カレンダーを 作る。 B。誕生日(1日)を指定して、且つ年(西暦)を指定して、誕生日の 曜日を出す(印刷)する。 のどちらですか。 プログラムを組む能力は、自分の考えを明確にし、相手に誤解なく 伝える・疑問は聞くことが大切だと思います。

noname#2072
noname#2072
回答No.1

↓このページの「指定した月のカレンダー」と言う  JavaScriptで、調べられるみたいです。参考までに

参考URL:
http://www4.osk.3web.ne.jp/~kitayan/

関連するQ&A