-PR-
解決
済み

曜日を求めるプログラムはどうやるの?

  • すぐに回答を!
  • 質問No.31096
  • 閲覧数1257
  • ありがとう数8
  • 気になる数0
  • 回答数5
  • コメント数0

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

9月15日は土曜日です。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル9

ベストアンサー率 34% (15/43)

またまた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の時は・・・

と、まぁ、ヒントはここまでです^^;
後は自分の力でがんばってください。
お礼コメント
noname#1519

ヒントありがとうございます。只今製作中です。しかしエラーが多くなかなか進みませんがarturさんのおかげで
ずいぶん進むことができました。
投稿日時 - 2001-01-24 20:31:47
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.1
レベル12

ベストアンサー率 40% (230/562)

あまり良い方法とは思っていませんが私は次のような方法を使っています。 これはWindowsでしか使えないのでご了承あれ。 SYSTEMTIME構造体の年、月、日その他もろもろを、代入ます。 それでSystemTimeToFileTime関数に渡してFILETIMEに変換します。 そのとき、曜日を指定してあっても無視されます。 得られたFILETIMEをFileTimeToSystemTime ...続きを読む
あまり良い方法とは思っていませんが私は次のような方法を使っています。
これはWindowsでしか使えないのでご了承あれ。

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

細かく書いてくださりありがとうございます。なんだかとても高度なものに思われますが、ヘルプを参照してみます。
投稿日時 - 2001-01-25 14:21:53


  • 回答No.3
レベル12

ベストアンサー率 41% (324/772)

【ヒント】 time.h関連を探してみましょう。 課題は極力自力で調査しましょう! ...続きを読む
【ヒント】
time.h関連を探してみましょう。

課題は極力自力で調査しましょう!
お礼コメント
noname#1519

そのとおりです。皆さんにいただいたヒントを元に、だいぶ進みました、あと1歩というところです。
投稿日時 - 2001-01-25 13:40:50
  • 回答No.4
レベル11

ベストアンサー率 49% (139/279)

宿題の回答としては、 1.ある基準日(例えば1900/01/01)の曜日を調べておいて、その日から何日たっているかを閏年も考慮して計算して、7で割って計算する。 2.Zellerの公式を利用する。 の2つがあります。 演習問題としては、1が正しいアプローチのような気がしますが、Zellerの公式も紹介しておきます。 式は下記のようになります。intは、小数点以下切り捨てmodは剰 ...続きを読む
宿題の回答としては、

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になります。
お礼コメント
noname#1519

7で割るやり方でやってみます(^o^)。これで完成に近づきそうです。
投稿日時 - 2001-01-24 20:36:11
  • 回答No.5
レベル8

ベストアンサー率 25% (5/20)

月と日だけではわかりませんので、年(西暦)も入力できるようにして 以下のURLを見てください。 EXCELで確認したところ完璧でした。 ...続きを読む
月と日だけではわかりませんので、年(西暦)も入力できるようにして
以下のURLを見てください。
EXCELで確認したところ完璧でした。
お礼コメント
noname#1519

ホームページ参考にさせていただきました!
投稿日時 - 2001-01-24 20:37:37
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ