함께 만드는 별빛 세상, 천문노트 · Since 2001

c 를 공부하다가

이도원 2003-11-13 (목) 11:11 7292 5
목록
이전글 다음글

웹 아카이브(2020-09-29 기록)에서 복원한 글입니다.

저기여 요즘 c를 공부하면서 이것저것 코드 갖다 쓰면서 하는데요 전에 첫번째 만났을때 받은 책자여
거기에 jd 를 구하는 소스 가 있어서 해봤는데... 이상하게 1582년 전으로는 jd가 제대로 나오는대ㅔ
그 이후에 년도는 -1로 나오데요... 그래서 소스를 연구해보니까 return(-1)이 무엇인가 이상하기는 한데
자세하게 모르겠어요 알려주세요
#include
#include

double JD(int year, int month, int day, int hour, int minute, int second);

int main(void)
{
int year,month,day,hour,minute,second;

printf("Enter the year>");
scanf("%d",&year);
printf("Enter the month>");
scanf("%d",&month);
printf("Enter the day>");
scanf("%d",&day);
printf("Enter the hour>");
scanf("%d",&hour);
printf("Enter the minute>");
scanf("%d",&minute);
printf("Enter the second>");
scanf("%d",&second);

printf("JD is %lf",JD(year,month,day,hour,minute,second));

return(0);
}

double JD(int year, int month, int day, int hour, int minute, int second)
{
double jd;
if(year>=1582 && month>=10 && day>=15)
{
if (month<3){year--;month+=12;}<br /> jd=floor(365.2425*year)+floor(30.6*month-0.4)+day
+hour/24.0+minute/24.0/60.0+second/24.0/60.0/60.0+1721027.5;
}
else if (year<=1582 && month<=10 && day<=4)<br /> {
if(month<3){year--;month+=12;}<br /> jd=floor(365.25*year)+floor(30.6*month-0.4)+day
+hour/24.0+minute/24.0/60.0+second/24.0/60.0/60.0+1721025.5;
}
else
{
return(-1);
}

return jd;
}

댓글 5

오학주2003-11-13 22:22

1582년 10월 5일~14일까지는 없는 날이니까 입력값이 그 안에 속하면 에러코드로 -1을 리턴하는거란다.
int result = JD( ... ); 이렇게 호출해보고..
result가 -1인지 검사해보면 에러인지 아닌지 알수있도록 하기 위해서야

근데 위에 JD 함수의 if조건들이 잘못된거 같구나..

if(year>1582 || (year==1582 && month>=10 && day>=15))
{...}
else if (year<1582 || (year==1582 && month<=10 && day<=4))
{...}
else
{
return(-1); /
}
이렇게 고치면 되지 않을까

형철2003-11-20 13:13

return -1은 흔히 에러를 표시하는 것이지...
내가 예전에 머리로만 프로그래밍 할 때 틀리게 짠 것인데 그것이 아직
사람들을 괴롭히고 있나보구나...

형철2003-11-20 13:13

그리고 위에 학주가 적은것도 틀렸다.

if(year>1582 || (year==1582 && month>10) || (year==1582 && month==10 && day>=15))
{...}
else if (year<1582 || (year==1582 && month<10) || (year==1582 && month==10 && day<=4))
{...}
else
{
return -1;
}

이렇게 해야 된다. 정말 틀리기 쉬운 오류이지.
학주가 한 방식으로는 1582년 9월 5일에 대해서 에러를 리턴한다.

죄동2004-01-15 01:01

이건 뭐예요??? 어떤건지...;;; ???

이채홍2004-01-15 11:11

와 어렵다

로그인하면 댓글을 쓸 수 있습니다.

무료 천문 라이브러리 - MatriXs

총 103건
번호제목글쓴이날짜조회
공지 MatriXsLib 1.0+7 이형철06-1523803
102 MatriXsLib 1.0+7 이형철06-1523803
101 안녕들하세요~^^+1 이도원06-228248
98 이렇게 좋은 소스가..^^+2 황태욱01-077881
97 요즘 다들 머하시나요?+5 이도원12-107667
96 c 를 공부하다가+5 이도원11-137293
95 Astronomical Algorithm..+4 김창환10-317663
94 침체기 같네요...+3 이도원09-227004
글쓰기