ページ 11

閏年を求めるプログラム

Posted: 2006年11月08日(水) 00:10
by louise
西暦y年m月d日の<前の日>あるいは<次の日>の日付を求めてセットする関数
void yesterday(int *y, int *m, int *d){/* …*/}
void tomottow (int *y, int *m, int *d){/* …*/}
を作成せよ。閏年などもきちんと判定すること。

という問題で
#include <stdio.h>

void yesterday(int *y, int *m, int *d)
{
int feb=28;

/* うるう年の判定 */
if(*y%4==0 && *y%100!=0 || *y%400==0){
feb=29;
}

*d=*d-1;
if(*d==0){
if(*m==3){
*d=feb;
}else if(*m==5||*m==7||*m==10||*m==12){
*d=30;
}else{
*d=31;
}
*m=*m-1;
if(*m==0){
*m=12;
*y=*y-1;
}
}
}
void tomorrow(int *y, int *m, int *d)
{
int feb=28;

/* うるう年の判定 */
if(*y%4==0 && *y%100!=0 || *y%400==0){
feb=29;
}

*d=*d+1;
if(*m==2){
if(*d>feb){
*m=*m+1;
*d=1;
}
}else if(*m==4||*m==6||*m==9||*m==11){
if(*d>30){
*m=*m+1;

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

int main(void)
{
int year, month, day;


printf("年:");
scanf("%d", &year);
printf("月:");
scanf("%d", &month);
printf("日:");
scanf("%d", &day);

yesterday(&year, &month, &day);
printf("昨日%d年は%d月%d日\n", year, month, day);

tomorrow(&year, &month, &day);
printf("明日は%d年%d月%d日\n", year, month, day);

return(0);
}

このソースではyesterday,tomorrowをどちらか一方のみにすれば
うまく動きますが、両方いれるとtomorrowで返される値が本日の物になってしまいます。

tomorrow(&year, &month, &day);
tomorrow(&year, &month, &day);
printf("明日は%d年%d月%d日\n", year, month, day);

こうすれば正常に表示されますが、なんか気持ち悪いです。

year == year2;
month == month2;
day == day2;

と書いて
tomorrow(&year2, &month2, &day2);
printf("明日は%d年%d月%d日\n", year2, month2, day2);

としたら意味の分からない数字がかえってきてしまいました。

yesterdayとtomorrowを同時に実行しなければ
正常に処理されるので関数はいいとおもうのですが、正常にあたいを表示するには
どうすればいいでしょうか??

よろしくお願いいたします。

Re:閏年を求めるプログラム

Posted: 2006年11月08日(水) 00:42
by Justy
[color=#c0c0ff" face="sans-serif]year == year2[/color]
の行は比較になっているので、
[color=#c0c0ff" face="sans-serif]year = year2[/color]
のように代入にすればうまくいくと思います(残りの2つも同様)。

Re:閏年を求めるプログラム

Posted: 2006年11月08日(水) 00:50
by louise
回答ありがとう御座います。

しかし

year = year2;
month =month2;
day =day2;

にすると

C:\C>uru
年:2006
月:11
日:7
昨日4194304年は4206592月4206591日

というふうになってしまいます…

Re:閏年を求めるプログラム

Posted: 2006年11月08日(水) 01:34
by Justy
 あ・・・。
 すみません、逆でした。

[color=#c0c0ff" face="sans-serif]year2 = year;[/color]