- ベストアンサー
曜日を求めるプログラムはどうやるの?
ただいま、C言語に苦戦中です。教えてください 2001年の月日の入力データから、曜日を求めるプログラム。 (実行結果例) 月を入力してください: 9↓ 日を入力して下さい : 15↓ 9月15日は土曜日です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
またまたarthurです。 1月~12月までの各月の日数を12コの配列に入れ、 1月から入力してもらった月の1つ前の月までの日数を合計します。 例)9月と入力された場合 1月の日数(31日)+2月の日数(28日)+・・・+8月の日数(31日) さらに入力された日にち分を加算します。 例)15日と入力された場合 1月~8月の合計日数+15日 その合計の値をさらに7(1週間=7日)で割ります。 7で割った余りの数字によって曜日を割り当てます。 1月1日(月)が最初なので、余りが1の時月曜日とすると、余りが2の時は・・・ と、まぁ、ヒントはここまでです^^; 後は自分の力でがんばってください。
その他の回答 (4)
- kazubon-X
- ベストアンサー率25% (5/20)
月と日だけではわかりませんので、年(西暦)も入力できるようにして 以下のURLを見てください。 EXCELで確認したところ完璧でした。
お礼
ホームページ参考にさせていただきました!
- arata
- ベストアンサー率49% (139/279)
宿題の回答としては、 1.ある基準日(例えば1900/01/01)の曜日を調べておいて、その日から何日たっているかを閏年も考慮して計算して、7で割って計算する。 2.Zellerの公式を利用する。 の2つがあります。 演習問題としては、1が正しいアプローチのような気がしますが、Zellerの公式も紹介しておきます。 式は下記のようになります。intは、小数点以下切り捨てmodは剰余を求めます。 ( [日] + int( ( [月] + 1 ) * 26 / 10 ) + [年の下2桁] + int([年の下2桁]/4) + int([年の上2桁]/4) - 2*[年の上2桁] ) mod 7 ※但し[月]が1月,2月の場合は「前年の13月、14月」として計算します。 むかし、むかし買ったPascalの自習書に乗っていました。 そうそう、Zellerの公式の結果は、土曜日が0になります。
お礼
7で割るやり方でやってみます(^o^)。これで完成に近づきそうです。
- selenity
- ベストアンサー率41% (324/772)
【ヒント】 time.h関連を探してみましょう。 課題は極力自力で調査しましょう!
お礼
そのとおりです。皆さんにいただいたヒントを元に、だいぶ進みました、あと1歩というところです。
- haporun
- ベストアンサー率40% (230/562)
あまり良い方法とは思っていませんが私は次のような方法を使っています。 これはWindowsでしか使えないのでご了承あれ。 SYSTEMTIME構造体の年、月、日その他もろもろを、代入ます。 それでSystemTimeToFileTime関数に渡してFILETIMEに変換します。 そのとき、曜日を指定してあっても無視されます。 得られたFILETIMEをFileTimeToSystemTime関数に渡して、再度SYSTEMTIMEに変換すれば、正しい曜日が入っていると言うわけです。 詳しくはSystemTimeToFileTime関数とFileTimeToSystemTime関数のヘルプを見ましょう。
お礼
細かく書いてくださりありがとうございます。なんだかとても高度なものに思われますが、ヘルプを参照してみます。
お礼
ヒントありがとうございます。只今製作中です。しかしエラーが多くなかなか進みませんがarturさんのおかげで ずいぶん進むことができました。