본문 바로가기
WORK/Sotfware

[프로그램] 달력 만들기

by KANG Stroy 2020. 4. 24.
728x90
728x90

달력을 만들기 위한 명세서 입니다. 

1. 1년을 계산 한다.

2. 윤년을 체크 하여 더한다.

3. 한달의 시작점을 찾는다. ( 1년 1월 1일은 월요일 이다. ) 

4. 출력 한다. 


1년을 계산


매달은 day로 배열을 만든다.

int day[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

char *week[] = {"sun","mon","tues","wed","thu","fri","sat"};

날 수를 계산 합니다. 


int year = 2020;

days = ((year - 1) * 365) + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400);

( year - 1 ) * 365 

년도에 따른 날 수를 계산 합니다. 

+((year - 1) / 4)

윤년이 있는 해를 더합니다. 

-((year - 1) / 100)

100년마다 윤년이 있는 해는 뺀다. 

+((year - 1) / 400)

400년이 있는 해는 더한다. 


윤년 계산


윤년을 계산한다. 

int day[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

int month =4;

for (int i = 0; i < month - 1; i++)

{

if ( month == 2 )

{ // 2 월달  

if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) //윤년(2/29)

{

day[1] = 29;

}

}

days += day[i];

}


월의 첫 시작 찾기


체크 하고 싶은 달과 날을 찾는다. 

int first_day = 0;

first_day = days % 7; 

printf("%d %d \r\n",first_day,days);

first_day 는 첫 시작 점을 잡기 위한 변수다. 

days % 7 은 모두 더한 날 수에서 7로 나눈 값의 나머지 값이다. 


출력


시작은 일요일 부터 시작 한다. 


int count = 0;

int curday = 24 ;

for (int i = 0; i <= first_day; i++)

{

printf("\t");

count++;

}


for (int i = 1; i <= day[month - 1]; i++)

{  

if (count >= 7)

printf("\n");

count = 0;

}

if(curday == i)

{

printf("[%d,%s]\t", i,week[count]);

}

else 

{

printf("%d\t", i);

}

count++;

}

2020년 4월 24일을 출력 하였습니다. 

출력 된 값은 아래 입니다. 

scanf로 입력을 받아서 출력 하였습니다. 

윤년 : https://gangsanilee.tistory.com/2461

728x90

'WORK > Sotfware' 카테고리의 다른 글

[Yocto] Yocto 버전 확인  (0) 2020.09.18
[String Compare] 스트링 비교  (0) 2020.07.31
[윤년] 윤년 계산 및 프로그램  (2) 2020.04.18
[자료모음] Critical Section  (0) 2019.12.14
[memory] 메모리의 종류  (0) 2018.09.20

댓글