

1582年10月14日以前の日付が入力されたとき、「それ以前の日数には対応していません」と出力される、  
つまり、その日以降の曜日を出力するという条件下で、

西暦、月、日付を入力することにより、その日の曜日を出力するプログラムを作成したいのですが、  
「1582年10月14日以前」と「1582年10月14日以降」を区別してくれるプログラムの作成方法がよくわからず、  
たとえば2001年1月12日のように入力してしまうと  
「1582年10月14日以前には対応していません」  
と出力されてしまいます。

私は以下のようにプログラムを作成しました。  
（なお、今回用いた手法は「ツェラーの公式」です。）

[code]

    #include <stdio.h>
    int main(void)
    {
        int year,m,q,k,j,h;
        k=year%100;
        j=year/100;
        h=(q+(m+1)*26/10+k+k/4+j/4+5*j)%7;
        printf("年: ");
        scanf("%d", &year);
        printf("月: ");
        scanf("%d", &m);
        printf("日: ");
        scanf("%d", &q);
    
    
        /* 1582年10月15日以後が入力されたとき */
        if(year>=1582 &&( m>=10 || q>=15 )&& h==1){
        printf("%4d年%2d月%2d日は日曜日です ", year, m, q);
        }
        else if(year>=1582 && (m>=10 || q>=15) && h==2){
        printf("%4d年%2d月%2d日は月曜日です ", year, m, q);
        }
        else if(year>=1582 && (m>=10 || q>=15) && h==3){
        printf("%4d年%2d月%2d日は火曜日です ", year, m, q);
        }
        else if(year>=1582 && (m>=10 || q>=15) && h==4){
        printf("%4d年%2d月%2d日は水曜日です ", year, m, q);
        }
        else if(year>=1582 && (m>=10 || q>=15) && h==5){
        printf("%4d年%2d月%2d日は木曜日です ", year, m, q);
        }
        else if(year>=1582 && (m>=10 || q>=15) && h==6){
        printf("%4d年%2d月%2d日は金曜日です ", year, m, q);
        }
        else if(year>=1582 && (m>=10 || q>=15) && h==7){
        printf("%4d年%2d月%2d日は土曜日です ", year, m, q);
        }
    
            /* 1582年10月14日以前が入力されたとき */
        else{
        printf("1582年10月14日以前には対応していません\n");
        }
           
        return 0;
    }
    
[/code]

実行結果  
$ ./a.out  
年: 2001  
月: 1  
日: 12  
1582年10月14日以前には対応していません

if()の（）の部分をどのように修正すればいいのでしょうか。


CC BY-SA 4.0
2020-11-23T05:55:47.003
72157
2020-11-23T09:14:01.130
2020-11-23T06:34:46.920
3060
41837
question
c
日時の判定を行う条件分岐がいまいち頭に入っていません。


年・月・日を別々に判定するから条件に漏れるのです。  
ツェラーの公式を使っているんだったら、ついでにフェアフィールドの公式も使って日数を計算して、「1582年10月14日」以降かどうか計算してはどうでしょうか。


CC BY-SA 4.0
2020-11-23T06:11:26.810
72158
2020-11-23T06:11:26.810
9515
72157
answer


自分の質問に回答します。（解決したので）  
metropolisさんの言うように、その三行の位置を、if文の上に持ってくると、期待されている結果となりました。


CC BY-SA 4.0
2020-11-23T09:14:01.130
72161
2020-11-23T09:14:01.130
41837
72157
answer