본문 바로가기
프로그래밍/업무로직

윤달 계산하기

by Daily Investing 2012. 11. 1.
반응형

출처 : http://blog.naver.com/PostView.nhn?blogId=kgw1729&logNo=140056878280&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView

 

 

#include <stdio.h>

int leap_year(int year); /* 윤달이 있는 해의 수를 계산하는 함수 선언*/

float total_days(int now_year, int now_month, int now_day, int plus_day);
/* 윤달을 고려하여 총날짜수를 계산 및 출력하는 함수 선언 */


void what_yoil(float all_days); /* 입력한 날이 무슨 요일인지 계산하는 함수 선언*/

main(){

int year, month, day, lastyear, plusday;
float alldays; /* main 함수에서 쓸 변수의 선언 */

printf("\n\n ** 1980년 1월 1일 (화요일)을 기준으로 한 날짜 계산 프로그램 **");
printf("\n 계산을 원하는 날짜를 입력해주세요.");
printf("\n (예) 2003년 11월 11일 ==> 2003 11 11 : ");

scanf("%d %d %d",&year,&month,&day); /* 사용자로부터 원하는 날짜를 입력받는다 */

if (month<3)
lastyear = year-1;


else
lastyear = year; /* 입력한 날짜에 2월이 포함되어있는지를 고려한다 */

plusday=leap_year(lastyear); /* 윤달 계산 함수 호출 */

alldays =total_days(year, month, day, plusday); /* 총 날짜수 계산 & 출력 함수 호출 */

what_yoil(alldays); /* 총날짜수로 입력한 날짜의 요일을 계산하는 함수 호출 */

return 0;

}

/* 입력한 해가 2월이 포함되어있는지 아는 상태에서 윤달을 계산하는 함수 */
int leap_year(int last_year){


int i, plus_year=0; /* 사용할 변수 선언 */

for(i=1980; i <= last_year; i++){


if (i%4 == 0)
plus_year++; /* 4년마다 윤달을 계산한다 */


if (i%100 == 0)
plus_year--; /* 단 100년마다 윤달에서 제외된다 */


if (i%400 == 0)
plus_year++; /* 다시 400년마다 윤달에 포함된다 */
}

return (plus_year); /* 윤달이 들어간 해의 수만을 알고 있다 */
}

/* 윤달이 든 해의 횟수를 아는 상태에서 총 날짜수를 계산하는 함수 */
float total_days(int now_year, int now_month, int now_day, int plus_day){

int i;
float all_days = 0; /* 기본 변수 선언 */

int m_days[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
/* 윤달을 생각하지 않은 평년(?)을 기준으로 각 달의 날짜수를 미리 입력한다 */

all_days += 365.0 * (now_year - 1980);
/* 올해를 제외한 이전해의 차이만큼 날짜수를 계산한다 */

for (i=0; i < (now_month-1); i++)
all_days += 1.0*m_days[i];
/* 이번달을 제외한 이전달까지의 차이만큼 날짜수를 계산한다 */

all_days += 1.0 * (now_day + plus_day);
/* 오늘 날짜수를 더하고 마지막으로 윤년을 고려하여 날짜수를 더 더한다 */

printf("\n 1980년 1월 1일 부터 입력하신 날짜까지 총 일수는 %6.0f 일이고, ", all_days);

return (all_days);
}

/* 1980년 1월 1일이 화요일이란 것을 아는 상태에서 입력한 날이 무슨 요일인지 계산하는 함수 */
void what_yoil(float all_days){

int now ; /* 기본 변수 선언 */

static char *week_day[]={"월", "화", "수", "목", "금", "토", "일"}; /* 수치화한 요일의 실제이름을 알게한다 */

now = (int) all_days%7;
/* 요일은 7일을 주기로 반복되므로 총 날짜수에서 7로 나눈 나머지만을 고려한다. */

printf("\n 그 날은 %s요일 입니다", *(week_day+now));
}

반응형