#include<stdio.h>
int main(void)
{
int month[] = {31,28,31,30,31,30,31,31,30,31,30,31};
int yy, mm, x=3,i;
printf("year? ");
scanf("%d",&yy);
printf("month? ");
scanf("%d",&mm);
for(i=1583;i< yy;i++){
if(i%4 ==0 && i% 100 !=0 || i%400 !=0) x = x+1;
x = x + 1;
}
if(yy%4 ==0 && yy% 100 !=0 || yy % 400 !=0) month[1] = 29;
for(i=0;i<mm;i++) x=x+month[i];
x = x%7;
printf(" SUN MON TUE WED THU FRI SAT\n");
for(i=0;i<x;i++)printf(" ");
for(i=1;i<=month[mm];i++){
printf("%4d",i);
if((x+i)%7 == 0)printf("\n");
}
return 0;
}
グレゴリオ暦
グレゴリオ暦
グレゴリオ暦のカレンダー作成のプログラムなのですが、間違いをご指摘していただけませんか?
Re: グレゴリオ暦
6行目: x=3 を x=6 に。kitlose さんが書きました:グレゴリオ暦のカレンダー作成のプログラムなのですが、間違いをご指摘していただけませんか?
11行目: scanf("%d",&mm); の後に mm--; を追加。
13行目: i%400 !=0 を i%400 ==0 に。
16行目: yy % 400 !=0 を yy % 400 ==0 に。
Re: グレゴリオ暦
この指摘で十分でしょうか? まだ見落としがあるような気がします。かずま さんが書きました:6行目: x=3 を x=6 に。kitlose さんが書きました:グレゴリオ暦のカレンダー作成のプログラムなのですが、間違いをご指摘していただけませんか?
11行目: scanf("%d",&mm); の後に mm--; を追加。
13行目: i%400 !=0 を i%400 ==0 に。
16行目: yy % 400 !=0 を yy % 400 ==0 に。
4. 義務行為 にもありますが、回答者への返信をお願いいたします。
蛇足: for文が 1つしかないプログラム
#include<stdio.h>
int main(void)
{
int y, m, d, w, z;
printf("year? "); if (scanf("%d", &y) != 1) return 1;
printf("month? "); if (scanf("%d", &m) != 1 || m-1u >= 12u) return 1;
z = (0x3bbeecc>>(m<<1)&3) + 28 + (m==2&&(y%4==0&&(y%100||y%400==0)));
y -= m<3, w = (y+y/4-y/100+y/400+".\1\4\3\6\1\4\6\2\5\0\3\5"[m])%7;
printf("\n Sun Mon Tue Wed Thu Fri Sat\n%*s", w*4, "");
for (d = 1; d <= z; d++) printf("%4d%s", d, ++w%7?"":"\n");
return !printf("\n");
}
Re: グレゴリオ暦
x が、ある月の初日の曜日を表します。box さんが書きました:パッと見、ある月の初日が何曜日であるかを計算するロジックが入っていないように見えます。
すなわち、元のプログラムの 18行目までのすべてが、
「ある月の初日が何曜日であるかを計算するロジック」です。