グレゴリオ暦

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kitlose

グレゴリオ暦

#1

投稿記事 by kitlose » 8年前

グレゴリオ暦のカレンダー作成のプログラムなのですが、間違いをご指摘していただけませんか?

コード:

#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;
}

box
記事: 2002
登録日時: 13年前

Re: グレゴリオ暦

#2

投稿記事 by box » 8年前

パッと見、ある月の初日が何曜日であるかを計算するロジックが入っていないように見えます。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

かずま

Re: グレゴリオ暦

#3

投稿記事 by かずま » 8年前

kitlose さんが書きました:グレゴリオ暦のカレンダー作成のプログラムなのですが、間違いをご指摘していただけませんか?
6行目: x=3 を x=6 に。
11行目: scanf("%d",&mm); の後に mm--; を追加。
13行目: i%400 !=0 を i%400 ==0 に。
16行目: yy % 400 !=0 を yy % 400 ==0 に。

かずま

Re: グレゴリオ暦

#4

投稿記事 by かずま » 8年前

かずま さんが書きました:
kitlose さんが書きました:グレゴリオ暦のカレンダー作成のプログラムなのですが、間違いをご指摘していただけませんか?
6行目: x=3 を x=6 に。
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");
}

kitlose

Re: グレゴリオ暦

#5

投稿記事 by kitlose » 8年前

かずまさん、申し訳ありません。
返信が遅くなってしまいました。
はい、これで大丈夫でした!
ありがとうございます!!

かずま

Re: グレゴリオ暦

#6

投稿記事 by かずま » 8年前

box さんが書きました:パッと見、ある月の初日が何曜日であるかを計算するロジックが入っていないように見えます。
x が、ある月の初日の曜日を表します。
すなわち、元のプログラムの 18行目までのすべてが、
「ある月の初日が何曜日であるかを計算するロジック」です。

閉鎖

“C言語何でも質問掲示板” へ戻る