C言語 暦

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

C言語 暦

#1

投稿記事 by neko » 13年前

y1年m1月d1日はy0年m0月d0日の何日後、あるいは何日前?というプログラムを作りたいのですが、分かりません。
分かる方は教えてください。よろしくお願いします。

non
記事: 1097
登録日時: 13年前

Re: C言語 暦

#2

投稿記事 by non » 13年前

y1年が閏年か、チェックするプログラムは作れますか?
non

neko

Re: C言語 暦

#3

投稿記事 by neko » 13年前

すみません
作れないです。

ぬっち
記事: 105
登録日時: 13年前
連絡を取る:

Re: C言語 暦

#4

投稿記事 by ぬっち » 13年前

どの程度、理解できているか教えていただけますか?
または、問題を解くまでに作成したプログラムとかを表示させていただけると回答しやすいです。

neko

Re: C言語 暦

#5

投稿記事 by neko » 13年前

質問と似たようなプログラム (途中まで)

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

途中ですが、似たようなプログラムではこのように作っていました。

初級者
記事: 200
登録日時: 13年前

Re: C言語 暦

#6

投稿記事 by 初級者 » 13年前

本当に自分で作りたいと思っているのか、
いやいや、実は人のコードを拝借しようと思っているのか、
正直なお気持ちをどうぞ。

neko

Re: C言語 暦

#7

投稿記事 by neko » 13年前

できれば自分で作りたいとは思いますが、全然分からないので、正直言うと、人のコードを拝借しようと思ってます。
すみません。
課題で焦ってます。

non
記事: 1097
登録日時: 13年前

Re: C言語 暦

#8

投稿記事 by non » 13年前

自分で作るのなら、上のプログラムはあまりにも未完成すぎて、何をやりたいのか
わかりませんが、まず、is_leap_yearの関数を完成させて、それをテストするプログラムを
作ってみてください。年月日の入力はinputDayの関数から曜日の入力部分を省きましょう。
non

アバター
toyo
記事: 35
登録日時: 13年前
住所: 宮崎県

Re: C言語 暦

#9

投稿記事 by toyo » 13年前

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で割り切れる年の処理が間違っていますが)
それとフォーラムルールはこちらというところも見てくださいね

初級者
記事: 200
登録日時: 13年前

Re: C言語 暦

#10

投稿記事 by 初級者 » 13年前

どうせサンプルコードを載せるんなら、
どこそこが間違っているなんて注釈を付けないで、
合ってるのを載せればいいのに…。

さかな

Re: C言語 暦

#11

投稿記事 by さかな » 13年前

プログラムの大まかな動作としては、
例として、2000年2月5日と2010年12月11日の差を計算するのなら、
①2001年から2009年までの日数を全部足す。(もちろん、うるう年のチェックも必要)
②2000年の3月から12月までの日数を全部足す。
③2010年の1月から11月までの日数を全部足す。
④2000年2月の残り日数、2010年12月の11日間を足す。
のようにするのが一般的だと思います。
時間の計算と違って、単純に引くだけではできませんよね。
同じ年同士の計算なら、当然違ってきます。
同じ年同士、同じ月同士でも違ってきます。
それぞれの月の日数は、配列で持っておくといいですよ。

さかな

Re: C言語 暦

#12

投稿記事 by さかな » 13年前

申し訳ありません。
前言を撤回させてください。
言っていることが滅茶苦茶でした。
軽率な言動は慎みます。

mila

Re: C言語 暦

#13

投稿記事 by mila » 13年前

正解を書いてしまうのも何なのでヒントだけ。

・比較対象のそれぞれの日付をstruct tm構造体にセットします。
・セットしたそれぞれのstruct tm構造体をmktime関数でtime_t型に変換します。
・difftime関数でtime_t型の差分を計算します。

これにより差分の秒数が得られるので、秒を日数に変換します。(これは単なる割り算です)
うるう年の考慮は不要です。

yyy

Re: C言語 暦

#14

投稿記事 by yyy » 13年前

難しいな
教えてあげて

閉鎖

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