ページ 11

至急お願いします

Posted: 2010年12月13日(月) 02:50
by fum
C言語
「○○は××の何日前(後)」を表示させるプログラムを作成したい。
途中ぬけて、おかしい部分があると思いますが・・・
後はもう1個年月日を入力して、差を求めたいのですが、どうすればいいかわかりません。
もしよければわかりやすいプログラム例をつくってください。
曜日が入ってるのもおかしいのかな???

#include <stdio.h>

int weekday(int y,int m,int d)
{
y=y+(m-1)/12;
m=(m-1)%12+1;

if(m<3)
{
y--;
m=m+12;
}

return (y+y/4-y/100+y/400+(m*13+8)/5+d)%7;
}
int main()
{
int y,m,d,ret;
char day[][7] ={"日","月","火","水","木","金","土"};
printf("西暦で年月日を入力してください\n");
scanf("%4d/%2d/%2d",&y,&m,&d);
ret = weekday(y,m,d);
printf("%4d年%2d月%2d日は%s曜日です。\n",y,m,d,day[ret]);
scanf("%d",&d);
return 0;
}

Re: 至急お願いします

Posted: 2010年12月13日(月) 03:29
by bitter_fox
はて、デジャブでしょうか?つい先日も非常に似た内容の質問を見た気がします。。。

おお、ありました、こちらです。
http://dixq.net/forum/viewtopic.php?f=3&t=7233
milaさんに敬意を込めて引用させていただきます。
mila さんが書きました: ・比較対象のそれぞれの日付をstruct tm構造体にセットします。
・セットしたそれぞれのstruct tm構造体をmktime関数でtime_t型に変換します。
・difftime関数でtime_t型の差分を計算します。

これにより差分の秒数が得られるので、秒を日数に変換します。(これは単なる割り算です)
うるう年の考慮は不要です。
とのことです。

で、質問者さんのコードについて質問が、あります。

コード:

char day[][7] ={"日","月","火","水","木","金","土"};
この、day[][7]というのはどういった意味でしょうか?下の、二つのうちから選んでみてください。
A.各文字列の長さが不定の文字列を7個宣言する。
B.各文字列の長さが7の文字列を不定個宣言する。

フォーラムルールに従った、質問をよろしくお願いします。
具体的にどこがわからないのか、
また、コードを載せる際は、
codeタグではさんでください。

Re: 至急お願いします

Posted: 2010年12月13日(月) 09:07
by non
これが、学校の課題であるならば、mktime関数などを使う方法は、先生の題意ではないでしょう。
次の方法で行うことを期待しているはずです。

1 ある西暦年を与えたら、その年が閏年か返す関数を作成する。
   閏年なら1,閏年でないなら0を返す関数
2 ある西暦年月日を与えたら、その年の1月1日からその年月日までの日数を求める。
   int month[]={31,28,31,30,31,30,31,31,30,31,30,31};
   のように、月の日数を定義しておく。または、その月までの累計日数を定義しても良い。
3月以降の場合は1の閏年かのチェックを行い、加算する。
   関数にして、日数を返すようにする。
3 ある西暦年(開始年)1月1日から、終了前年12月31日までの日数を求める。
   forで回し、閏年かチェックして365を加算するか366を加算する。
4 3の日数+2による終了年の日数-2による開始年の日数で答えが求まる。

Re: 至急お願いします

Posted: 2010年12月13日(月) 10:19
by さかまき
関数weekdayはツェラーの公式というものらしいですね。
年月日から曜日を求める方法らしいですが、これは今回やりたい事とはあまり関係なさそうです。
もう1個年月日を入力しても、差は求められませんよ。曜日の差は求められますが。

ここまでは御自分で作ったような印象をあたえる書き方ですが、よそから引用したものですよね?
引用するプログラム自体が今回の目的には適していません。別を探してみましょう。

Re: 至急お願いします

Posted: 2010年12月13日(月) 11:11
by さかまき
http://detail.chiebukuro.yahoo.co.jp/qa ... 1313296768
あたりの流用から
http://detail.chiebukuro.yahoo.co.jp/qa ... 1051937585
から、ここに至る。という感じですか。

char day[][7]の件は質問者さんの責任ではありませんですね。
自分でやる気はゼロみたい。