掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.24369

西暦年月日を入力して、その日の曜日を表示させるプログラム。
投稿者---Little(2005/11/26 21:54:44)


西暦年月日を入力して、その日の曜日を表示させるプログラムを作りたいのですが、とりあえず、やってみましたが…

int main(void)
{

int i,y,m,d,dy,dw;

int D[]={0,31,28,31,30,31,30,31,31,30,31,30,31};

printf("Year?");

scanf("%d",&y);

printf("Month?");

scanf("%d",&m);

printf("Day?");

scanf("%d",&d);

for(i=0;i<=m-1;i++){
dy = d + D[i] ;
}

if(m>=3){
if(y % 4 == 0){
if(y % 400 == 0){
dy = dy + 1 ;
}
else if(y % 100 ==0){
dy = dy ;
}
else{
dy = dy + 1 ;
}
}

else if(y % 4 == 1 || y % 4 == 2 || y % 4 == 3 ){
dy = dy ;
}
}
dw = (dy -1 + ( y + ( y - 1 )/4 - ( y - 1 )/100 + ( y - 1 )/400))%7 ;

if (dw == 0) printf("Sunday\n");
else if (dw == 1) printf("Monday\n");
else if (dw == 2) printf("Tuesday\n");
else if (dw == 3) printf("Wednesday\n");
else if (dw == 4) printf("Thursday\n");
else if (dw == 5) printf("Friday\n");
else if (dw == 6) printf("Saturday\n");

return 0 ;

}
このプログラムを各年の1月1日〜2月28日で試してみると、うまくいくのですが、3月1日に入るとなぜかうまく働いてくれません。その理由が分からないのでどなたか教えてください。ちなみに、この一連のプログラムを行うにはもっと簡単に行える関数というかコマンド?みたいなものがあるようですが、基本的に各年の1月1日を、
(y+(y-1)/4-(y-1)/100+(y-1)/400)%7で(0:Sunday〜)、同年の○月○日は1月1日から△日経過しているという考え方で、曜日を割り出すプログラムにしなければならないといけないので、注文が多いですがよろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:西暦年月日を入力して、その日の曜日を表示させるプログラム。 24371 まきじ 2005/11/26 23:23:59
<子記事> Re:西暦年月日を入力して、その日の曜日を表示させるプログラム。 24372 もぐりん 2005/11/26 23:45:25
<子記事> ソースの添付は字下げしてくださるようにお願いします 24373 管理人 2005/11/26 23:48:48


No.24371

Re:西暦年月日を入力して、その日の曜日を表示させるプログラム。
投稿者---まきじ(2005/11/26 23:23:59)


>if(m>=3){

閏年は m == 2 の時では?

1 月 2 月は前年の 13 月 14 月となります。


この投稿にコメントする

削除パスワード

No.24372

Re:西暦年月日を入力して、その日の曜日を表示させるプログラム。
投稿者---もぐりん(2005/11/26 23:45:25)


まずは、「掲示板利用宣言」に目を通していますか?
ソースはHTML変換ツールを使うことを謳っていますが・・・。
それと、問題が出た時のデータを提示してください。
VC++.net 2003でコンパイルしてみましたが、2005年11月26日を入力したら、問題なくSaturdayが表示されましたよ。






この投稿にコメントする

削除パスワード

No.24375

Re:西暦年月日を入力して、その日の曜日を表示させるプログラム。
投稿者---まきじ(2005/11/26 23:55:37)


>VC++.net 2003でコンパイルしてみましたが、2005年11月26日を入力したら、問題なくSaturdayが表示されましたよ。

閏年の年は正しい結果が出力されませんね。
例えば 2004/3/1 は Monday ですが Friday となります。


この投稿にコメントする

削除パスワード

No.24373

ソースの添付は字下げしてくださるようにお願いします
投稿者---管理人(2005/11/26 23:48:48)


投稿上の注意をお読みの上、字下げをしたプログラムを再投稿してください。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧