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;
}
至急お願いします
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: 至急お願いします
はて、デジャブでしょうか?つい先日も非常に似た内容の質問を見た気がします。。。
おお、ありました、こちらです。
http://dixq.net/forum/viewtopic.php?f=3&t=7233
milaさんに敬意を込めて引用させていただきます。
で、質問者さんのコードについて質問が、あります。 この、day[][7]というのはどういった意味でしょうか?下の、二つのうちから選んでみてください。
A.各文字列の長さが不定の文字列を7個宣言する。
B.各文字列の長さが7の文字列を不定個宣言する。
フォーラムルールに従った、質問をよろしくお願いします。
具体的にどこがわからないのか、
また、コードを載せる際は、
codeタグではさんでください。
おお、ありました、こちらです。
http://dixq.net/forum/viewtopic.php?f=3&t=7233
milaさんに敬意を込めて引用させていただきます。
とのことです。mila さんが書きました: ・比較対象のそれぞれの日付をstruct tm構造体にセットします。
・セットしたそれぞれのstruct tm構造体をmktime関数でtime_t型に変換します。
・difftime関数でtime_t型の差分を計算します。
これにより差分の秒数が得られるので、秒を日数に変換します。(これは単なる割り算です)
うるう年の考慮は不要です。
で、質問者さんのコードについて質問が、あります。 この、day[][7]というのはどういった意味でしょうか?下の、二つのうちから選んでみてください。
A.各文字列の長さが不定の文字列を7個宣言する。
B.各文字列の長さが7の文字列を不定個宣言する。
フォーラムルールに従った、質問をよろしくお願いします。
具体的にどこがわからないのか、
また、コードを載せる際は、
codeタグではさんでください。
Re: 至急お願いします
これが、学校の課題であるならば、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による開始年の日数で答えが求まる。
次の方法で行うことを期待しているはずです。
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による開始年の日数で答えが求まる。
non
Re: 至急お願いします
関数weekdayはツェラーの公式というものらしいですね。
年月日から曜日を求める方法らしいですが、これは今回やりたい事とはあまり関係なさそうです。
もう1個年月日を入力しても、差は求められませんよ。曜日の差は求められますが。
ここまでは御自分で作ったような印象をあたえる書き方ですが、よそから引用したものですよね?
引用するプログラム自体が今回の目的には適していません。別を探してみましょう。
年月日から曜日を求める方法らしいですが、これは今回やりたい事とはあまり関係なさそうです。
もう1個年月日を入力しても、差は求められませんよ。曜日の差は求められますが。
ここまでは御自分で作ったような印象をあたえる書き方ですが、よそから引用したものですよね?
引用するプログラム自体が今回の目的には適していません。別を探してみましょう。
Re: 至急お願いします
http://detail.chiebukuro.yahoo.co.jp/qa ... 1313296768
あたりの流用から
http://detail.chiebukuro.yahoo.co.jp/qa ... 1051937585
から、ここに至る。という感じですか。
char day[][7]の件は質問者さんの責任ではありませんですね。
自分でやる気はゼロみたい。
あたりの流用から
http://detail.chiebukuro.yahoo.co.jp/qa ... 1051937585
から、ここに至る。という感じですか。
char day[][7]の件は質問者さんの責任ではありませんですね。
自分でやる気はゼロみたい。