プロが教えるわが家の防犯対策術!

ただいま、C言語に苦戦中です。教えてください
2001年の月日の入力データから、曜日を求めるプログラム。
(実行結果例)
月を入力してください: 9↓
日を入力して下さい : 15↓

9月15日は土曜日です。

A 回答 (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の時は・・・

と、まぁ、ヒントはここまでです^^;
後は自分の力でがんばってください。
    • good
    • 1
この回答へのお礼

ヒントありがとうございます。只今製作中です。しかしエラーが多くなかなか進みませんがarturさんのおかげで
ずいぶん進むことができました。

お礼日時:2001/01/24 20:31

月と日だけではわかりませんので、年(西暦)も入力できるようにして


以下のURLを見てください。
EXCELで確認したところ完璧でした。

参考URL:http://www.top.or.jp/~cpop/sitiyo.htm
    • good
    • 3
この回答へのお礼

ホームページ参考にさせていただきました!

お礼日時:2001/01/24 20:37

宿題の回答としては、



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になります。
    • good
    • 1
この回答へのお礼

7で割るやり方でやってみます(^o^)。これで完成に近づきそうです。

お礼日時:2001/01/24 20:36

【ヒント】


time.h関連を探してみましょう。

課題は極力自力で調査しましょう!
    • good
    • 1
この回答へのお礼

そのとおりです。皆さんにいただいたヒントを元に、だいぶ進みました、あと1歩というところです。

お礼日時:2001/01/25 13:40

あまり良い方法とは思っていませんが私は次のような方法を使っています。


これはWindowsでしか使えないのでご了承あれ。

SYSTEMTIME構造体の年、月、日その他もろもろを、代入ます。
それでSystemTimeToFileTime関数に渡してFILETIMEに変換します。
そのとき、曜日を指定してあっても無視されます。
得られたFILETIMEをFileTimeToSystemTime関数に渡して、再度SYSTEMTIMEに変換すれば、正しい曜日が入っていると言うわけです。
詳しくはSystemTimeToFileTime関数とFileTimeToSystemTime関数のヘルプを見ましょう。
    • good
    • 1
この回答へのお礼

細かく書いてくださりありがとうございます。なんだかとても高度なものに思われますが、ヘルプを参照してみます。

お礼日時:2001/01/25 14:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!