抜山蓋世 S-D理論!

遊戯王の自己理論「S-D」。それについて書いたり書かなかったり・・・。
S-Dの説明については専用ページをご覧下さい。

7/4

2006-07-04 23:02:56 | C言語
今日もCの勉強。
入力した日付の前日と翌日を表示。閏年を処理とか。
ifが多すぎ・・・。

#include <stdio.h>

void yesterday(int *y, int *m, int *d)
{

if(*m == 1){
if(*d > 1 && *d <= 31){ *d = *d - 1; }
else if(*d == 1){*y = *y-1, *m = 12; *d = 31; }
}

else if (*m == 2){
if(*d > 1 && *d <= 29){ *d = *d - 1; }
else if(*d == 1){ *m = *m - 1; *d = 31; }
}

else if (*m == 3){
if(*d > 1 && *d <= 31){ *d = *d - 1; }
else if(*d == 1)
{ if(*y % 4 == 0)
{ *m = 2; *d = 29; }
else {*m = 2; *d = 28; }
}}

else if (*m==4 || *m==6 || *m==8 || *m==9 || *m==11){
if(*d > 1 && *d <= 31){ *d = *d - 1; }
else if(*d == 1){ *m = *m - 1; *d = 31; }
}

else if (*m==5 || *m==7 || *m==10 || *m==12){
if(*d > 1 && *d <= 31){ *d = *d - 1; }
else if(*d == 1){ *m = *m - 1; *d = 30; }
}

}


void tomorrow(int *y, int *m, int *d)
{

if(*m == 1 || *m==3 || *m==5 || *m==7 || *m==8 || *m==10 ){
if(*d >= 1 && *d <31){ *d = *d + 1; } }

else if (*m == 2){
if(*d >= 1 && *d <28){ *d = *d + 1; } if(*y % 4 == 0){ *d = 29; }
else {*m = 3; *d = 1; }
}
else if(*d == 29){ *m = *m + 1; *d = 1; }
}


else if (*m==4 || *m==6 || *m==9 || *m==11){
if(*d >= 1 && *d <31){ *d = *d + 1; } }

else if (*m==12){
if(*d >= 1 && *d <31){ *d = *d + 1; } }

}

int main(void)
{
int na,nb,nc;
int nd,ne,nf;

puts("3つの整数を入力");
printf("西暦:"); scanf("%d", &na);
printf("月:"); scanf("%d", &nb);
printf("日:"); scanf("%d", &nc);
nd = na;
ne = nb;
nf = nc;

yesterday(&na, &nb, &nc);
printf("昨日は%d年%d月%d日です。\n", na, nb,nc );


tomorrow(&nd, &ne, &nf);
printf("明日は%d年%d月%d日です。\n", nd, ne, nf);

return(0);
}


3つの整数を入力
西暦:2000
月:1
日:1
昨日は1999年12月31日です。
明日は2000年1月2日です。
./10--2
3つの整数を入力
西暦:2000
月:2
日:29
昨日は2000年2月28日です。
明日は2000年3月1日です。
./10--2
3つの整数を入力
西暦:2000
月:3
日:1
昨日は2000年2月29日です。
明日は2000年3月2日です。
./10--2
3つの整数を入力
西暦:1999
月:3
日:1
昨日は1999年2月28日です。
明日は1999年3月2日です。