ページ 1 / 1
C言語 暦
Posted: 2010年12月10日(金) 22:25
by neko
y1年m1月d1日はy0年m0月d0日の何日後、あるいは何日前?というプログラムを作りたいのですが、分かりません。
分かる方は教えてください。よろしくお願いします。
Re: C言語 暦
Posted: 2010年12月10日(金) 22:41
by non
y1年が閏年か、チェックするプログラムは作れますか?
Re: C言語 暦
Posted: 2010年12月10日(金) 22:45
by neko
すみません
作れないです。
Re: C言語 暦
Posted: 2010年12月10日(金) 22:48
by ぬっち
どの程度、理解できているか教えていただけますか?
または、問題を解くまでに作成したプログラムとかを表示させていただけると回答しやすいです。
Re: C言語 暦
Posted: 2010年12月10日(金) 23:22
by neko
質問と似たようなプログラム (途中まで)
#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言語 暦
Posted: 2010年12月10日(金) 23:23
by 初級者
本当に自分で作りたいと思っているのか、
いやいや、実は人のコードを拝借しようと思っているのか、
正直なお気持ちをどうぞ。
Re: C言語 暦
Posted: 2010年12月10日(金) 23:29
by neko
できれば自分で作りたいとは思いますが、全然分からないので、正直言うと、人のコードを拝借しようと思ってます。
すみません。
課題で焦ってます。
Re: C言語 暦
Posted: 2010年12月11日(土) 08:12
by non
自分で作るのなら、上のプログラムはあまりにも未完成すぎて、何をやりたいのか
わかりませんが、まず、is_leap_yearの関数を完成させて、それをテストするプログラムを
作ってみてください。年月日の入力はinputDayの関数から曜日の入力部分を省きましょう。
Re: C言語 暦
Posted: 2010年12月11日(土) 10:28
by toyo
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;}
}
これが閏年かチェックするプログラムですよ(400で割り切れる年の処理が間違っていますが)
それと
フォーラムルールはこちらというところも見てくださいね
Re: C言語 暦
Posted: 2010年12月11日(土) 18:38
by 初級者
どうせサンプルコードを載せるんなら、
どこそこが間違っているなんて注釈を付けないで、
合ってるのを載せればいいのに…。
Re: C言語 暦
Posted: 2010年12月11日(土) 22:35
by さかな
プログラムの大まかな動作としては、
例として、2000年2月5日と2010年12月11日の差を計算するのなら、
①2001年から2009年までの日数を全部足す。(もちろん、うるう年のチェックも必要)
②2000年の3月から12月までの日数を全部足す。
③2010年の1月から11月までの日数を全部足す。
④2000年2月の残り日数、2010年12月の11日間を足す。
のようにするのが一般的だと思います。
時間の計算と違って、単純に引くだけではできませんよね。
同じ年同士の計算なら、当然違ってきます。
同じ年同士、同じ月同士でも違ってきます。
それぞれの月の日数は、配列で持っておくといいですよ。
Re: C言語 暦
Posted: 2010年12月11日(土) 22:55
by さかな
申し訳ありません。
前言を撤回させてください。
言っていることが滅茶苦茶でした。
軽率な言動は慎みます。
Re: C言語 暦
Posted: 2010年12月12日(日) 01:11
by mila
正解を書いてしまうのも何なのでヒントだけ。
・比較対象のそれぞれの日付をstruct tm構造体にセットします。
・セットしたそれぞれのstruct tm構造体をmktime関数でtime_t型に変換します。
・difftime関数でtime_t型の差分を計算します。
これにより差分の秒数が得られるので、秒を日数に変換します。(これは単なる割り算です)
うるう年の考慮は不要です。
Re: C言語 暦
Posted: 2010年12月12日(日) 01:45
by yyy
難しいな
教えてあげて