본문내용
연도 및 달이 입력되면 해당 달력을 출력하기 위해 초일을 알아올 필요가 있다. 이를 위해서는 해당연도의 초일 시작 요일을 알아야 하는데 이부분을 계산하기 위해서는 기준 연도 1979년을 시작으로 입력 연도와의 차이만큼 일정 수를 더해주는 방식을 생각할 수 있다. 1979년의 초일은 월요일이며, 요일은 총 7개이므로 모듈러 연산을 통해 요일을 구할 수 있을 것이다. 문제되는 것은 윤년이 되는데 이는 4로 나누어지며, 100의 배수가 아니거나, 400의 배수인 연도가 윤년이 될 것이다. 평년의 경우는 365일이며, 365일은 7로 모듈러 연산을 하면 1이 남는다. 윤년의 경우는 366일이며, 7로 모듈러 연산을 하면 2가 남는다. 따라서 입력연도와 기준연도간의 차이만큼 날짜를 세주는 변수에 평년은 1, 윤년은 2를 더하고 7로 모듈러 연산을 하여 초일을 구할 수 있을 것이다. 이때 모듈러의 결과는 0은 월요일이 되며, 순서에 따라 6은 일요일이 될 것이다. 주의 할 것은 입력된 해당 연도까지는 계산하지 말아야 한다. 이를 계산하면 다음 연도의 초일을 구하는 것이 되기 때문이다.
입력달의 초일은 앞서 구한 해당연도의 초일로부터 계산되어야 한다. 이때 1, 3, 5, 7, 8, 10, 12월은 총일수가 31일이며, 2월은 윤년의 경우 29일, 평년의 경우 28일이 된다. 나머지 달들은 모두 30일이다. 여기서 28일은 7로 모듈러 연산하면 결과가 0이 되어 더해 줄 필요가 없지만, 29일은 1, 30일은 2, 31일은 3이 되어 해당하는 달이 입력 달보다 선행하는 경우 날짜 계산 변수에 이를 모두 더해 주어야 한다. 어짜피 모듈러 연산을 할 것이기 때문에 연도의 초일을 구할 때와 마찬가지로 나머지 값들만 더해주면 된다. 계산이 끝나면 7로 모듈러 연산하여 시작하는 요일을 구할 수 있을 것이다.
입력달의 초일은 앞서 구한 해당연도의 초일로부터 계산되어야 한다. 이때 1, 3, 5, 7, 8, 10, 12월은 총일수가 31일이며, 2월은 윤년의 경우 29일, 평년의 경우 28일이 된다. 나머지 달들은 모두 30일이다. 여기서 28일은 7로 모듈러 연산하면 결과가 0이 되어 더해 줄 필요가 없지만, 29일은 1, 30일은 2, 31일은 3이 되어 해당하는 달이 입력 달보다 선행하는 경우 날짜 계산 변수에 이를 모두 더해 주어야 한다. 어짜피 모듈러 연산을 할 것이기 때문에 연도의 초일을 구할 때와 마찬가지로 나머지 값들만 더해주면 된다. 계산이 끝나면 7로 모듈러 연산하여 시작하는 요일을 구할 수 있을 것이다.
추천자료
MST 정렬 프로그램(C언어)
c언어를 이용해 점수와 성적을 입력 받아 평균평점을 출력하는 프로그램
C언어를 이용해 정수를 입력 받아서 소수인지?아닌지? 출력하는 프로그램
C언어를 이용해 문자열을 역(문자의 순서를 반대로)으로 출력하는 프로그램
C언어를 이용한 팩토리얼 함수(n!) 프로그램
C언어를 이용해 중간고사와 기말고사의 합을 구하는 성적처리 프로그램
C언어를 이용해 1차원배열과 함수를 이용해서 분포,평균,빈도수,*출력 프로그램
c언어로 만든 배열을 이용한 대소문자 변환 For 문 프로그램
c언어로 만든 배열을 이용한 대소문자 변환 while 문 프로그램
c언어로 만든 자기참조 구조체 및 메모리 포인터 (링크드 리스트) 프로그램
[C언어] 로또 번호를 읽어 온 후 랜덤으로 생성된 숫자와 비교하여 전체당첨자를 출력하거나...
[C언어]허프만 알고리즘을 이용한 Text 파일 압축/해제 프로그램
문자열(string) 함수, 파일입출력 함수 사용프로그램(C언어, 한글레포트추가)
소개글