←検索窓の楽しみ方
  ショッピングモール  掲示板ランキング


【掲示板ご利用上の注意】

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

 詳しくはこちら


 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


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

No.4233

万年カレンダーのロジックの理解不足
投稿者---あきき(2005/07/07 01:44:08)


万年カレンダーのプログラムをみて、コメントをつけながら一つ一つ確認していたのですが、変数【uruu】以下でつまづきました。まず何を指しているのかが分からないのと、月と【uruu】をたした意味が分かりません。
なんか、何か見落としている様な気がします。それはいったい何なのでしょうか。それとコメントはあってるでしょうか?

#include <stdio.h>

int main(){
 
    int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int y,m,i,h,uruu,count;
    char date[6][7] = {0};  //    日にち格納用配列;[第何週][何曜日]
    

    printf("年(西暦)を入力してください? ");
    scanf("%d",&y);
    
    printf("月? ");  
    scanf("%d",&m);
    
    if (y%4==0 && y%100!=0 || y%400==0){ //   閏年時の日数変更
        month[2] = 29;
    }

    uruu = y + (y-1) / 4 - (y-1) / 100 + (y-1) / 400;

    for(i=0;i<m;i++){
        uruu = uruu+month[i];
    }
    h = uruu % 7;

    for(i=0,count=1;i<6;i++){
        for(;h<7 && count <= month[m];h++,count++){
            date[i][h] = count;//作業用カレンダー作成
        }
        h=0;
    }

    printf("日\t月\t火\t水\t木\t金\t土\t\n");

    for(i=0;i<6;i++){
        for(h=0;h<7;h++){
            if(date[i][h] != 0){
                printf("%2d\t",date[i][h]);
            }
            else{
                printf("\t");
            }
        }
        putchar('\n');
    }
    return 0;
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:万年カレンダーのロジックの理解不足 4234 まきじ 2005/07/07 08:57:28


No.4234

Re:万年カレンダーのロジックの理解不足
投稿者---まきじ(2005/07/07 08:57:28)


>月と【uruu】をたした意味が分かりません。
>uruu = y + (y-1) / 4 - (y-1) / 100 + (y-1) / 400;
>for(i=0;i<m;i++) uruu = uruu+month[i];
>h = uruu % 7;

曜日を求めています、
Zaller の法則 を調べてみてください。


この投稿にコメントする

削除パスワード

No.4235

Re:万年カレンダーのロジックの理解不足
投稿者---かずま(2005/07/07 12:05:11)


>> 月と【uruu】をたした意味が分かりません。
>> uruu = y + (y-1) / 4 - (y-1) / 100 + (y-1) / 400;
>> for(i=0;i<m;i++) uruu = uruu+month[i];
>> h = uruu % 7;

> 曜日を求めています、
> Zaller の法則 を調べてみてください。

Zaller ではなく、Zeller ですね。
内容を説明せずに参照先だけを書く場合、正確に書かないと、検索できません。

さて、なぜこれで曜日が求まるか、ですが、
365 = 7 x 52 + 1 ですから、1年は52週と 1日ということで、1年経つと曜日が
1日ずれます。だから、まずは y。
4年に 1度閏年があり、100年に 1度それが平年になり、さらに 400年に 1度閏年
が復活しますから、+ y/4 - y/100 + y/400 で補正します。
y ではなく、(y-1) になっているのは、今年の分は、m[2] = 28 または 29 に
含まれているからです。
m月の直前までの month[i] を足すことによって、m月1日までの曜日のずれの
累積が求まりますから、7で割った余りが曜日となります。



この投稿にコメントする

削除パスワード

No.4238

Re:万年カレンダーのロジックの理解不足
投稿者---あきき(2005/07/07 15:33:51)


まじきさん、かずまさん有難うございました。胸のつっかりが無事に取れました。


この投稿にコメントする

削除パスワード

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




掲示板提供:Real Integrity