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

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

 詳しくはこちら


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

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


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

No.21636

西暦1年1月1日の曜日について
投稿者---Mi(2005/06/25 11:13:45)


カレンダーを表示させるプログラムなんですけど、学校のUnixのコンソールのcalコマンドで西暦1年1月を表示させると土曜日なんですが、このプログラムでは月曜日になってしまいます。どのような曜日の判定の計算方法なら学校のUnixのコンソールの様な曜日判定になるのか、説明下手で申し訳ないんですがどうか教えてください。

#include <stdio.h>

void cal(int y)
{
    int  m, d, w, i, z;  char x[12][6][7] = { 0 };

    w = (y + (y-1)/4 - (y-1)/100 + (y-1)/400) % 7;
    for (m = 1; m <= 12; m++) {
        z = (m==2) ? 28+(y%4==0 && y%100 || y%400==0) : 30+(0x15aa>>m&1);
        for (i = 0, d = 1; d <= z; d++) {
            x[m-1][i][w] = d;
            if (++w == 7) w = 0, i++;
        }
    }
    printf("%36d年\n\n", y);
    for (m = 1; m <= 12; m += 3) {
        #define WEEK  " 日 月 火 水 木 金 土   "
        printf("%11d月%22d月%22d月\n" WEEK WEEK WEEK "\n", m, m+1, m+2);
        for (i = 0; i < 6; i++)
            for (z = -1; z < 2; z++) {
                for (w = 0; w < 7; w++)
                    printf(x[m+z][i][w] ? "%3d" : "   ", x[m+z][i][w]);
                printf(z==1 ? "\n" : "   ");
            }
        puts("");
    }
}

int main(void)
{
    int y;

    printf("カレンダーを表示する年を入力してください。");
    if (scanf("%d", &y) == 1) cal(y);
    return 0;
}




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:西暦1年1月1日の曜日について 21639 Craft 2005/06/25 11:26:58
<子記事> cal について 21641 si 2005/06/25 12:23:11


No.21639

Re:西暦1年1月1日の曜日について
投稿者---Craft(2005/06/25 11:26:58)


>カレンダーを表示させるプログラムなんですけど、学校のUnixのコンソールのcalコマンドで西暦1年1月を表示させると土曜日なんですが、このプログラムでは月曜日になってしまいます。どのような曜日の判定の計算方法なら学校のUnixのコンソールの様な曜日判定になるのか、説明下手で申し訳ないんですがどうか教えてください。

10数年前の記憶なので正確なところは覚えていませんが、calコマンドは1582年のユリウス暦→グレゴリオ暦の日付変更が考慮されていて、この年の10月が少ない日数で出力されていたような気がします。
$ cal 1582
でどう出るか確認してみてはいかがでしょう?


この投稿にコメントする

削除パスワード

No.21641

cal について
投稿者---si(2005/06/25 12:23:11)


ここに簡単かつ明瞭に説明があります。
http://www.asahi-net.or.jp/~hi5k-stu/compt/calendar.htm


この投稿にコメントする

削除パスワード

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