1579, 1/79 회원가입  로그인  
   kordokrip
   C 언어 강의 요일구하기 C언어 프로젝트

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=2022 [복사]


요일을 추적하는 것이 어려울 것같지만 원리를 알면 간단합니다. 날짜수를 7로 나누어 나머지 수만 보면 요일을 알 수 있지요. 그렇다면 지금부터 AD 1년 1월 1일 까지가 몇일인가만 알면 간단히 해결됩니다.

1년은 365일 이지만 4년마다 한번씩은 윤년이 366일이 됩니다.

즉 원래 2월은 평년이 28일까지 있는 것이지만, 만일 윤년이 없이 언제나 평년이라면 1년의 길이가 365일 되어 실제보다 0.2422일 짧아지므로 점차 역일과 계절이 달라집니다. 그러므로 율리우스력에서는 4년마다 2월을 29일로 함으로써 4년간의 연평균 일수가 365.25일로 정하였습니다.

이 값은 실제보다 1년에 0.0078일이 길어집니다. 그후의 그레고리력에서는 다으음과 같은 차윤법을 정하고 시행하였습니다.

즉, ① 서력 기원 연수가 4로 나누어 떨어지는 해는 우선 윤년으로 하고,

② 그 중에서 100으로 나누어 떨어지는 해는 평년으로 하며,

③ 다만 400으로 나누어 떨어지는 해는 다시 윤년으로 정하였다.

이로써 1년의 평균길이를 365.2425일로 정하여 역에 썼으므로 실제의 1년보다 0.0003일이 길지요



계산을 편하기 하기 위해  금년말까지(2002.12.31 금요일) 의 일수를 계산해

봅시다.

우선 2002 × 365 = 730,730 일 여기에 윤년 횟수를 더해주면 정확한 일수가 되겠지요.

우선 4로 나누어지는 해가 윤년이니  500회

여기에 100으로 나누어지는 해는 평년이니 20회를 빼야지요

그런데 400으로 나누어지는 해 5회는 다시 윤년으로 되었으니 5회를 더해야지요.



그러면 일수 계산이 되지요

730,730 일 + (500 - 20 + 5) = 731,215 일

금년 12월 31일이 화요일 이니까 7로 나누어 역산을 해보면 1년 1월 1일의

요일을 알 수 있지요.

731,215 를 7로 나누면 몫이 104,459 이고 나머지가  "2" 입니다.

나머지가 2라는 것은 나머지 하루는 화요일(2002.12.31)이고

또 다른 하루(즉 AD 1년 1월1일)는 월요일이 됩니다.



AD  0001년 1월 달력이 아래와 같이 생겼다는 것이지요



월    화     수    목    금    토    일

-----------------------------------

1      2      3        4     5      6       7

8       9     10     11



원리는 달력을 보면서  생각하면 너무 간단히 이해가 되지요




동일인이 달력과 요일제를 동시에 만든 것이 아닌 데 AD 1년 1월 1일을  월요일로 만든것에는 그저 경탄과 감탄을 할 뿐입니다.
오늘날 우리가 사용하는 AD(연)달력은 서기 526년에 흑해 북부 스키디아 지방의 수도승 디오니수스 엑시귀스가 만들었는 데  예수그리스도가 탄생한 해를 기원1년으로 잡았지요.
즉 우리가 사용하는 달력은 약 1500년전에 만들어진것입니다.



이에 비해서  요일제(7일1주)의 기원은 훨씬 역사가 깊지요.  성경에 하나님께서 6일간 천지를 창조하시고 7일째는 쉬었다는 창세기에 그 뿌리를 두고 있겠지요.
요일제(7일1주)의 구체적인 기원은 칼데아·바빌로니아에서 나왔다고 합니다.   단 7일이라는 주기 그 자체의 기원은 태음력(太陰曆)의 1월을 4등분한 데서, 또는 일·월·5대행성(五大行星)의 신앙에서 생겼다고 하지요. 바빌로니아에서는 처음에 삭(朔)에서 시작하여 7일째마다 절대휴식일(絶對休息日) 또는 장이 서는 날이라 하고 달의 28일에 이르러 나머지 1일 또는 2일은 순서에서 뺐으나, BC 18세기쯤부터 월상(月相)과 관계없이 일관하여 순서에 넣었다고 합니다.

이 습관을 이어받은 것이 유대력이며, 모세에 의한 민족력의 확립 때에 7요일이 도입되었지요. 이것이 그리스도교·이슬람교 두 민족에 전해진 것이며, 그리스도교권에서는 325년 니케아공의회에서 춘분일은 3월 21일(당시의 율리우스력)에 고정시킴과 동시에 7요일이 정식으로 채용되게 되었지요.



이렇게 요일제는 달력보다 훨씬 오래전에 만들어졌으며
같은 기독교권에서 보더라도 요일제가 달력보다 200년이나 앞서 정식으로 적용되고 있었던 것입니다.
즉 수도승 디오니수스 엑시귀스가  AD526년에 달력을 만들때는 이미 요일제가 확실히 정착되어 시행되고 있었던 것입니다.  
AD 1년 1월 1일이 월요일이 되도록 만든 것에는 아무리 생각해도 경이스럽다고  볼 수 뿐이 없네요.





자 그럼 여기서 C언어로 날짜 알고리즘을 보겠습니다.




# include <stdio.h>




//= 0 Sunday

int day_of_week(int y, int m, int d)

{

static int t[] = {0,3,2,5,0,3,5,1,4,6,2,4};

y-=m < 3;

retun (y +y/4-y/100+y/400+t[m-1]+d) %7;

}




void main()

{

int y,m,d;

char *day[7] = {"SUN","MON","TUE,"WED","THU","FRI","SAT"};




printf(" Enter date [yyyy mm dd]: ");

scanf("%d %d %d, &y, &m, &d);

printf("%s\n", day[day_of_week(y,m,d)]);

}


  Hit : 36692     Date : 2012/06/21 04:37
[불법/스팸글로 신고하기]



    
dudgns0908 질문하나만하겟습니다.
int day_of_week(int y, int m, int d)

{

static int t[] = {0,3,2,5,0,3,5,1,4,6,2,4};

y-=m < 3;

retun (y +y/4-y/100+y/400+t[m-1]+d) %7;

}
여기서 y-=m < 3; 랑 t[m-1]부분이 이해가 가지않는데 설명부탁드려도 되나요??
2012/09/10  
1579   CMD 네트워크 관련 명령어 모음[6]     themafia
11/26 62247
1578   리눅스 기본명령어~[6]     chlckdghsla
10/14 41044
  C 언어 강의 요일구하기 C언어 프로젝트[1]     kordokrip
06/21 36691
1576   네트워크 기본용어[7]     chlckdghsla
10/14 33406
1575   리눅스 명령어 마스터 1[78]     소유
09/02 32487
1574   백트랙5 사용법/자세히좀 알려주세요[3]     cswcys
09/20 31623
1573   [CTF] 기괴한 음악 풀이[3]     4irjuno
09/09 30474
1572   막 간지나게 해킹하고싶어요[13]     dldvk9999
10/11 30334
1571   초보자를 위한 C++ 강좌 - 씹어먹는 C++ !![2]     kevin0960
03/06 30158
1570   [정보] 윈도우 달력 프로그램[3]     4irjuno
09/09 30067
1569   플래쉬를 이용한 xss 해킹[3]     4irjuno
09/23 29936
1568   [CTF] 슈팅게임이 조아요.     4irjuno
09/09 29050
1567   [정보] 컴퓨터 자격증 기출문제 모음 프로그램[4]     inwoox
09/26 28808
1566   [CTF] 내가 누군지 아니?     4irjuno
09/09 28695
1565   [CTF]커스텀 웹 브라우져 풀이     4irjuno
09/09 28451
1564   텔넷이안들어가져여[3]     dygks3157
08/28 28230
1563   리눅스의 거의 모든 명령어?[314]     소유
10/05 28088
1562   bufffer over flow [BOF] test     해커 Hades
10/24 28030
1561   네트워크 해킹 스터디 하실분 찾아여[6]     kiriro
11/04 27734
1560   net send가 안되요[2]     dldvk9999
10/11 27595
1 [2][3][4][5][6][7][8][9][10]..[79]

Copyright 1999-2021 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com