C言語関係掲示板

過去ログ

No.1188 n日後の年月日を求める

[戻る] [ホームページ]
No.15526

配列
投稿者---やま(2004/07/14 22:56:35)


西暦年、月、日とその何日後かを入力し、その日が西暦何年何月何日であるかを示すプログラムってできますか?


No.15527

Re:配列
投稿者---あかま(2004/07/14 23:13:39)


>西暦年、月、日とその何日後かを入力し、その日が西暦何年何月何日であるかを示すプログラムってできますか?
できます。
「カレンダー」あたりで過去ログ検索してください。



No.15533

Re:配列
投稿者---やま(2004/07/14 23:59:15)


ご指摘ありがとうございます。過去ログを探したんですがありませんでした。


No.15534

Re:配列
投稿者---ともじ(2004/07/15 00:37:24)


>ご指摘ありがとうございます。過去ログを探したんですがありませんでした。

ここはどうでしょう。
http://f1.aaa.livedoor.jp/~pointc/log359.html


No.15644

Re:配列
投稿者---やま(2004/07/18 17:36:19)


とりあえず、何日後が365日以下の場合は、自力でできたのですが、
#include <stdio.h>

#define TUKINONIXTUSUU (13)
int main(void)
{
int tuki[TUKINONIXTUSUU]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int year,month,day,after,n,s,d,r,i=0;

printf("year? ");
scanf("%d",&year);
printf("month? ");
scanf("%d",&month);
printf("day? ");
scanf("%d",&day);
printf("nannitigo? ");
scanf("%d",&after);

if(year%400==0){
tuki[2]=29;
}else if(year%100==0){
tuki[2]=28;
}else if(year%4==0){
tuki[2]=29;
}else{
tuki[2]=28;
}
n=tuki[month]-day;

if(n>=after){
s=day+after;
printf("%d nen%d gatu%d niti\n",year,month,s);
}
if(n<after){
d=day+after;
for(month;d>tuki[month];month=month+1){
d=d-tuki[month];
}
printf("%d nen%d gatu%d niti\n",year,month,d);

}
}
一年を超えると、閏年が来る関係で、うまく表示できません。
どなたか何かアドバイスをいただけませんか?


No.15649

Re:n日後の年月日を求める
投稿者---ともじ(2004/07/19 00:42:10)


>とりあえず、何日後が365日以下の場合は、自力でできたのですが、
>一年を超えると、閏年が来る関係で、うまく表示できません。

No.15534で紹介した過去ログはお役に立ちませんでしたか。
過去ログのcalc_dateはそのままn日後の日付を求めるのに使えますが。
それとも、time.hの関数は使わずに解くのでしょうか。
#include <stdio.h>

int is_leap(int y)
{
    if (y%4 == 0 && (y%100 != 0 || y%400 == 0))
        return 1;
    else
        return 0;
}

int main(void)
{
    int tuki[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int year,month,day,after,n,d;
        
    printf("何年? ");      scanf("%d",&year);
    printf("何月? ");      scanf("%d",&month);
    printf("何日? ");      scanf("%d",&day);
    printf("何日後? ");    scanf("%d",&after);

    day += after;
    while(1) {
        if (month == 2)
            n = tuki[month-1] + is_leap(year);
        else
            n = tuki[month-1];
        if (n >= day) break;
        day -= n;
        month++;
        if (month > 12) {
            month = 1;
            year++;
        }
    }
    printf("%d年%d月%d日\n", year, month, day);

    return 0;
}

それから、題名の「配列」はあまり適切ではないように感じました。
また、ソースを添付する際には上記、HTML変換ツールを使って字下げ
してくださるようにお願いします。



No.15531

Re:配列
投稿者---SASA(2004/07/14 23:35:11)


SASAです。

>西暦年、月、日とその何日後かを入力し、その日が西暦何年何月何日であるかを示すプログラムってできますか?

環境が提示されていないので絶対とは言えませんが、できると思います。