달력을 하나 만들어 넣어야 해서, 윤년 계산을 한번 살펴 보았습니다.
그냥 잘 만들어 놓은것을 쓰면 되지만, 프로그램을 처음 배운다는 생각으로 작성해 보았습니다.
위키 백과 윤년
태양력의 윤년 |
현재 전 세계 대부분의 나라에서 쓰는 그레고리력은 4년에 반드시 하루씩 윤날(2월 29일)을 추가하는 율리우스력을 보완한 것으로, 태양년과의 편차를 줄이기 위해 율리우스력의 400년에서 3일(세 번의 윤년)을 뺐다.
그레고리력의 정확한 윤년 규칙은 다음과 같다. - 연수가 4로 나누어 떨어지는 해는 윤년으로 한다. (1988년, 1992년, 1996년, 2004년, 2008년, 2012년, 2016년, 2020년, 2024년, 2028년, 2032년, 2036년, 2040년, 2044년 ...) - 연수가 4, 100으로 나누어 떨어지는 해는 평년으로 한다. (1900년, 2100년, 2200년, 2300년, 2500년...) - 연수가 4, 100, 400으로 나누어 떨어지는 해는 윤년으로 둔다. (2000년, 2400년...) |
즉, 400년에 97년은 윤년이 되며, 1년은 평균 365.2425일이 된다. 이는 춘분점을 기준으로 한 태양년보다 0.0003일(26초)이 길기 때문에, 약 3,300년마다 1일의 편차가 난다.
윤년 수정 제안과 그 한계 |
그레고리력은 상당히 치밀한 역법으로 1582년에 만들어진 이래 아직까지 수정된 바가 없다. 그러나, 약 3천 년마다 1일의 편차가 발생할 수 있어서 몇 가지 수정안이 제시된 바 있는데, 대표적인 것이 4,000년마다 1일씩 윤년을 추가로 빼자는 제안이다. 간혹 이 제안이 이미 받아들여졌다는 주장이 있으나 이는 사실이 아니다. (현재의 태양년과 그레고리력의 수적 차이, 율리우스력이 128년마다 1일의 편차가 난다는 것만 고려하면 3,200년마다 1일씩 윤년에서 제외하는 것이 더 타당하다.)
이러한 수정안들의 가장 큰 문제점은 수천 년 이상의 주기로 일어나는 지구의 세차운동이나 조석의 감소로 인한 하루 길이의 증가를 계산에 넣고 있지 않다는 데에 있다. 특히, 조석은 후빙기 반동이나 기후 변화로 인한 해수면 상승에 따라 꽤 변할 수 있는데, 이러한 자료는 예측하기 힘들기 때문에 이를 고려하여 역법을 만드는 데는 상당한 시일이 걸릴 것이다.그리고 2033년에는 윤년과 삭망월이 겹처져서 2033년 문제가 생긴다.
위의 내용에서 빨간색 부분만을 가져와서 간단하게 플로우를 그려 보았습니다.
- 연수가 4로 나누어 떨어지는 해는 윤년으로 한다. (1988년, 1992년, 1996년, 2004년, 2008년, 2012년, 2016년, 2020년, 2024년, 2028년, 2032년, 2036년, 2040년, 2044년 ...) - 연수가 4, 100으로 나누어 떨어지는 해는 평년으로 한다. (1900년, 2100년, 2200년, 2300년, 2500년...) - 연수가 4, 100, 400으로 나누어 떨어지는 해는 윤년으로 둔다. (2000년, 2400년...) |
2000년을 테스트 한다면 첫 번째 2000 / 4 = 500 이고 나머지가 0 두 번째 2000 / 100 = 20 이고 나머지가 0 세 번째 2000 / 400 = 5 이고 나머지가 0 이므로 윤년이 된다. |
1900 년을 테스트 한다면 첫 번째 1900 / 4 = 475 이고 나머지가 0 두 번째 1900 / 100 = 19 이고 나머지가 0 세 번째 1900 / 400 = 4 이고 나머지가 300(나누어 떨어지지 않으므로) 이므로 평년이 된다. |
프로그램을 만든다면?
year는 연도 입니다. 원하는 연도를 넣어 주세요. scanf를 입력 받아서 하셔도 될거 같습니다.
int year = 0; printf("input year : "); scanf("%d", &year); if ( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0 ) { printf("_year_\r\n"); } |
한줄로 나타낼 수 있을거 같내요.
달력은 https://gangsanilee.tistory.com/2463
'WORK > Sotfware' 카테고리의 다른 글
[String Compare] 스트링 비교 (0) | 2020.07.31 |
---|---|
[프로그램] 달력 만들기 (0) | 2020.04.24 |
[자료모음] Critical Section (0) | 2019.12.14 |
[memory] 메모리의 종류 (0) | 2018.09.20 |
[Linked List No1] Struct 분석 (0) | 2018.09.10 |
댓글