CAFE

C 프로그래밍

특정일자에서 몇일 후 날짜의 요일 구하기

작성자별은빛나고|작성시간15.11.08|조회수3,578 목록 댓글 0
아래 코드에서 오류가 발생합니다.

2015년 12월 1일에 30일 후를 입력하면 다운됩니다.


#include <stdio.h>
 
// 함수 선언 
int get_week_day(intintint);
void set_feb(int);
void get_dday(int *int *int *int);
int input(int *int *int *int *);
 
// 프로그램 종료시 까지 필요하므로 외부변수로 선언 
int month[12= { 312831303130313130313031 };    // 각 달의 일수
char week[7][4= { "일""월""화""수""목""금""토" };        // 요일명
 
void main(void)
{
    int yy, mm, dd;    // 기준년월일 
    int after;        // 구해야 할 날수 
    int wd;            // 최종 요일 
 
    input(&yy, &mm, &dd, &after);    // 기준일자, 더해야 할 날 수 입력 
    get_dday(&yy, &mm, &dd, after);    // 최종 날짜 얻기 
    wd = get_week_day(yy, mm, dd);    // 요일 얻기 
    
    printf(" %d년 %d월 %d일 (%s)입니다.\n", yy, mm, dd, week[wd]); 
}
 
int get_week_day(int yy, int mm, int dd)
{
    int i;
    int total = 0, y;
    
 
    yy--;                // 이전해 말일까지
    total = 365 * yy;    // 작년 말일까지 평일 수 
    total += yy / 4;
    total += yy / 400;
    total -= yy / 100;    // 윤년 만큼 더함 
    
    set_feb(yy);        // 올해 2월의 날수 설정
     
    for (i = 0; i < mm-1; i++) total += month[i];    // 이전달 말일 까지 날짜 누산 
 
    total += dd;    // 금일의 날수 더함 
 
    // 1년 1월 1일을 월요일로 가정 
 
    return (total % 7);    // 요일을 반환 (0 이면 일요일) 
}
 
void set_feb(int yy)
{
    // 외부변수 이므로 별다른 조치를 하지 않고 변경
     
    if (yy % 4 == 0 && yy % 100 != 0 || yy % 400 == 0)
            month[1= 29;    // 윤년 
    else    month[1= 28;        // 평년 
 
void get_dday(int *yy, int *mm, int *dd, int after)
{
    int i, j;
 
    after += *dd;    // 받은 날짜를 더함 
 
    for (i = *yy; after > 0; i++*mm = 1) {    // 기준년부터  
        for (j = *mm; j <= 12; j++) {            // 월단위로 
            if (j == 2) set_feb(*yy);            // 2월이면 윤년확인 
            if (after > month[j-1]) {            // 당월보다 크면 
                after -= month[j-1];             // 당월 날수를 뺌 
            }
            else break;                            // 당월 말일보다 작으면 
        }
        if (j < 13 && after < month[j-1]) {        // 당월 말 보다 작으면 
            *yy = i;                            // 년도를 확정 
            *mm = j;                            // 월 확정 
            *dd = after;                        // 날짜 확정 
            break;                                // 날짜 찾기 종료 
        }
    }    
}
 
int input(int *yy, int *mm, int *dd, int *after)
{
    printf(" 기준 날짜를 입력하세요(yyyy mm dd) : ");
    scanf("%d %d %d", yy, mm, dd);                 // 기준 날짜값 입력 
 
    printf(" 며칠 후를 계산할까요? : ");
    scanf("%d", after);                            // 며칠 후인지 입력받기
}
cs


요일 구하는 공식

    wd = ((21*(yy/100)/4)+(5*(yy-yy/100*100)/4)+(26*(mm+1)/10)+dd-1) % 7;
    //a=년도 앞 두 자리, b=년도 뒤 두자리, c=월, d=일 : Zeller의 공식 
cs

요일 계산 자료


다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼