C言語 暦
Re: C言語 暦
質問と似たようなプログラム (途中まで)
#include<stdio.h>
void newline(void){printf("\n");return;}
void inputDay(int Day[]){
printf("Input 年(西暦),月[1..12],日[1..30],曜日[0..6]:");
scanf("%d%d%d%d, &Day[3], &Day[2],&Day[1],&Day[0]);
return;
}
void printDay(int Day [], char *DOWTable[7]){
printf("西暦%d年%4d月%4d日(%s)", Day[3],Day[2],Day[1],DOWTable[Day[0]]);
return;
}
void input_n(int *np){
printf("How many days after?");
scanf("%d", np);
return;
};
int is_leap_year(int y){
if(y % 400 == 0{return 0;}
else if (y % 100 == 0){return 0;}
else if (y % 4 == 0){return 1;}
else {return 0;}
}
途中ですが、似たようなプログラムではこのように作っていました。
#include<stdio.h>
void newline(void){printf("\n");return;}
void inputDay(int Day[]){
printf("Input 年(西暦),月[1..12],日[1..30],曜日[0..6]:");
scanf("%d%d%d%d, &Day[3], &Day[2],&Day[1],&Day[0]);
return;
}
void printDay(int Day [], char *DOWTable[7]){
printf("西暦%d年%4d月%4d日(%s)", Day[3],Day[2],Day[1],DOWTable[Day[0]]);
return;
}
void input_n(int *np){
printf("How many days after?");
scanf("%d", np);
return;
};
int is_leap_year(int y){
if(y % 400 == 0{return 0;}
else if (y % 100 == 0){return 0;}
else if (y % 4 == 0){return 1;}
else {return 0;}
}
途中ですが、似たようなプログラムではこのように作っていました。
Re: C言語 暦
neko さんが書きました:すみません
作れないです。
int is_leap_year(int y){
if(y % 400 == 0{return 0;}
else if (y % 100 == 0){return 0;}
else if (y % 4 == 0){return 1;}
else {return 0;}
}
それとフォーラムルールはこちらというところも見てくださいね
Re: C言語 暦
プログラムの大まかな動作としては、
例として、2000年2月5日と2010年12月11日の差を計算するのなら、
①2001年から2009年までの日数を全部足す。(もちろん、うるう年のチェックも必要)
②2000年の3月から12月までの日数を全部足す。
③2010年の1月から11月までの日数を全部足す。
④2000年2月の残り日数、2010年12月の11日間を足す。
のようにするのが一般的だと思います。
時間の計算と違って、単純に引くだけではできませんよね。
同じ年同士の計算なら、当然違ってきます。
同じ年同士、同じ月同士でも違ってきます。
それぞれの月の日数は、配列で持っておくといいですよ。
例として、2000年2月5日と2010年12月11日の差を計算するのなら、
①2001年から2009年までの日数を全部足す。(もちろん、うるう年のチェックも必要)
②2000年の3月から12月までの日数を全部足す。
③2010年の1月から11月までの日数を全部足す。
④2000年2月の残り日数、2010年12月の11日間を足す。
のようにするのが一般的だと思います。
時間の計算と違って、単純に引くだけではできませんよね。
同じ年同士の計算なら、当然違ってきます。
同じ年同士、同じ月同士でも違ってきます。
それぞれの月の日数は、配列で持っておくといいですよ。