2007년 달력과...
기념일 그리고 디데이 소스 입니다. -.-;
닫기 Code Type : C
/////////////////////////////////////////
// 2007년 04월 01일 고급프로그래밍 //
// Coded By 오형탁 Ohyung (2002711158) //
// ohyung@ohyung.com http://ohyung.com //
/////////////////////////////////////////
//#define 달력
//#define 기념일계산프로그램
//#define 디데이계산프로그램
/*<<<<<<<<<헤더파일부분>>>>>>>>>>*/
#include < stdio.h>
#include
/*---------- 메인함수 시작 ----------*/
int main()
{
/* 여기서 부터 ifdef문으로 조절 */
#ifdef 달력
int monthday[12]={31,28,31,30,31,30,31,31,30,31,30,31}; // 각 달의 마지막 날짜만 배열에 넣기
int i_month=0,i_m_day,monthsum=0,i=0,day=0; // 1월 1일 월요일
/* 달 입력부분 */
while (i_month<=0||i_month>=13) // 1부터 12까지의 수만을 입력받는다.
{
printf("보고 싶은 '월'을 입력하세요 : ");
scanf("%d", &i_month);
fflush(stdin); // 버퍼 날리기
}
/*<><><> 달 입력부분 끝 <><><>*/
printf("\n\t\t# # # # 2007년 %d월 달력 # # # #\n==============================================================\n",i_month);
i_m_day=monthday[i_month-1]; //i_m_day라는곳에 배열의 현재 달의 마지막 날을 넣기
/* 입력받은 월 1일의 요일 구하기*/
for(i=0;i<=i_month-1;i++) // 0부터 입력받은 달의 -1 만큼의 배열의 수를 더함
monthsum+=monthday[i];
monthsum-=(i_m_day-1); // 이번달은 빼줌
day=monthsum%7; // 요일을 숫자로 보기 위함
/*<><><> 각 월의 1일의 요일을 구함 끝 <><><>*/
/* 날짜를 계산해서 요일별로 출력 */
printf("\t일\t월\t화\t수\t목\t금\t토\n");
for(i=0;i<=day-1;i++) // 요일을 이용하여 1일 앞의 tab의 수를 계산
printf("\t");
for(i=1;i<=i_m_day;i++) // i_m_day까지를 출력 1부터 입력받은 달까지의 수로 계산
{
printf("\t%2d",i);
if((i+day)%7==0) //만약에 토요일이 된다면 한줄 내림
printf("\n");
}
/*<><><> 요일별로 출력 끝 <><><>*/
printf("\n==============================================================\n");
#elif defined 기념일계산프로그램
/*
1.기념일 계산 프로그램
입력 : 오늘은 ( )년 ( )월 ( )일 로부터
출력 : ( )일째 되는 날입니다.
*/
int monthday[12]={31,28,31,30,31,30,31,31,30,31,30,31}; // 달력과 마찬가지로 일반적인 연도의 날짜.
int i_year=0,i_month=0,i_day=0,s_year,s_month,s_day,i,cm_sum=0,c_year;
long int sum=0;
time_t today; // today를 time_t 형으로 선언
struct tm *t; // 구조체 선언 time함수내의 tm을 t로 가리킨다.
today = time(NULL); // 오늘을 세팅한뒤
t = localtime(&today); // t로 오늘을 가리킴
s_year=t->tm_year+1900; // 시스템의 오늘의 연도
s_month=t->tm_mon+1; // 시스템의 오늘의 월
s_day=t->tm_mday; // 시스템의 오늘의 일
printf("\n오늘 %d년 %d월 %d일 입니다.\n",s_year,s_month,s_day);
printf("**** 오늘보다 이전의 날짜를 선택하세요 ****\n\n");
/* 기념일의 연도, 월, 일을 조건적으로 받는다. 최대한 올해의 연도와 같을수 있음*/
while (i_year<=0||i_year>=s_year+1)
{
printf("기념일의 '연도'를 입력하세요 : ");
scanf("%d", &i_year);
fflush(stdin);
}
while (i_month<=0||i_month>=13)
{
printf("기념일의 '월'을 입력하세요 : ");
scanf("%d", &i_month);
fflush(stdin);
}
while (i_day<=0||i_day>=32)
{
printf("기념일의 '일'을 입력하세요 : ");
scanf("%d", &i_day);
fflush(stdin);
}
printf("\n오늘은 (%d)년 (%d)월 (%d)일 로부터\n",i_year,i_month,i_day);
/* 시스템 연도에서 입력 연도를 빼줌 */
c_year=i_year;
for(i_year;i_year<=s_year-1;i_year++) // 윤년과 일반년의 연도의 값을 구해서 365일의 값을 취함, 단 윤년일경우 366일
{
if(i_year%400==0 || (i_year%100!=0 && i_year%4==0))
sum+=366;
else
sum+=365;
}
if((s_year%400==0 || (s_year%100!=0 && s_year%4==0))&&s_month>=3) // 시스템이 윤년일경우 3이상이라면 +1로 2월 29일 체크
sum+=1;
if((c_year%400==0 || (c_year%100!=0 && c_year%4==0))&&i_month>=3) // 입력받은것이 윤년일경우 3월 이상이라면 -1로 체크
sum-=1;
/*<><><> 여기까지가 시스템 연도에서 입력 연도의 차이 <><><>*/
/* 시스템의 1월 1일부터 오늘까지의 합에서 1월 1일부터 입력날짜의 날짜합을 빼줌 */
for(i=0;i<=s_month-2;i++) // 시스템의 월바로 전달까지 sum에 더하기
sum+=monthday[i];
sum+=(s_day-1); // 조절용 식
for(i=0;i<=i_month-2;i++) // 입력받은 달의 바로 전달까지의 날짜를 계산
cm_sum+=monthday[i];
sum-=cm_sum; // 구한 날짜로 빼줌
sum-=i_day; // 입력한 날짜를 빼줌
sum+=2; // 최종 조절
/*<><><> 여기까지가 날짜의 차이 <><><> */
printf("( %d )일째 되는 날입니다.\n\n",sum);
#elif defined 디데이계산프로그램
/*
2.D-Day 계산
입력 : ()년 ()월 ()일 까지의 D-Day는?
출력 : ()일 남았습니다.
*/
int monthday[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int i_year=0,i_month=0,i_day=0,s_year,s_month,s_day,i,cm_sum=0,c_year;
long int sum=0;
time_t today; // today를 time_t 형으로 선언
struct tm *t; // 구조체 선언 time함수내의 tm을 t로 가리킨다.
today = time(NULL); // 오늘을 세팅한뒤
t = localtime(&today); // t로 오늘을 가리킴
s_year=t->tm_year+1900; // 시스템의 오늘의 연도
s_month=t->tm_mon+1; // 시스템의 오늘의 월
s_day=t->tm_mday; // 시스템의 오늘의 일
printf("\n오늘 %d년 %d월 %d일 입니다.\n\n",s_year,s_month,s_day);
printf("**** 오늘 이후의 날짜를 선택하세요 ****\n\n");
/* 디데이의 연도, 월, 일을 조건적으로 받는다 최소한 올해와 같은 연도여야함*/
while (i_year<=s_year-1||i_year>=9999)
{
printf("디데이의 '연도'를 입력하세요 : ");
scanf("%d", &i_year);
fflush(stdin);
}
while (i_month<=0||i_month>=13)
{
printf("디데이의 '월'을 입력하세요 : ");
scanf("%d", &i_month);
fflush(stdin);
}
while (i_day<=0||i_day>=32)
{
printf("디데이의 '일'을 입력하세요 : ");
scanf("%d", &i_day);
fflush(stdin);
}
printf("\n(%d)년 (%d)월 (%d)일 까지의 D-Day는?\n\n",i_year,i_month,i_day);
/* 입력 연도에서 시스템 연도를 빼줌 */
c_year=s_year;
for(s_year;s_year<=i_year-1;s_year++) // 윤년과 일반년의 연도의 값을 구해서 365일의 값을 취함, 단 윤년일경우 366일
{
if(s_year%400==0 || (s_year%100!=0 && s_year%4==0))
sum+=366;
else
sum+=365;
}
if((s_year%400==0 || (s_year%100!=0 && s_year%4==0))&&s_month>=3) // 시스템이 윤년일경우 3이상이라면 +1로 2월 29일 체크
sum+=1;
if((c_year%400==0 || (c_year%100!=0 && c_year%4==0))&&i_month>=3) // 입력받은것이 윤년일경우 3월 이상이라면 -1로 체크
sum-=1;
/*<><><> 여기까지가 입력 연도에서 시스템 연도의 차이 <><><>*/
/* 1월1일부터 입력날짜까지의 합에서 시스템의 1월 1일부터 오늘까지의 날짜합을 빼줌 */
for(i=0;i<=i_month-2;i++) // 입력날짜의 월바로 전달까지 sum에 더하기
sum+=monthday[i];
sum+=(i_day-1); // 조절용 식
for(i=0;i<=s_month-2;i++) // 시스템의 바로 전달까지의 날짜를 계산
cm_sum+=monthday[i];
sum-=cm_sum; // 윗식에서 구한 시스템의 전달까지의 날짜를 빼줌
sum-=s_day; // 시스템의 일를 빼줌
sum+=1; // 최종 조절
/*<><><> 여기까지가 날짜의 차이 <><><> */
printf("( %d )일 남았습니다. \n\n",sum);
#else
printf("/////////////////////////////////////////\n\
// 2007년 04월 01일 고급프로그래밍 //\n\
// Coded By 오형탁 Ohyung (2002711158) //\n\
// ohyung@ohyung.com http://ohyung.com //\n\
/////////////////////////////////////////\n");
#endif
/* 모든 ifdef가 끝나고 endif로 마무리 각 ifdef마다 endif로 살포시 마무리 */
return 0;
}
/* 여긴끝! */
/*
<5주차 실습문제>
@2007년 달력 출력@
(입력) 달 => 1월
(출력) 달 => ##1월의 달력입니다##
일 월 화 수 목 금 토
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
1. 1월부터 12월까지의 12달에 대한 총 날수를 배열에 저장해 둔다.
(달의 날짜 수 : 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
2. 달력에 대한 배열 [6][7] 을 저장해 둔다.
3. 2007년 1월 1일의 요일 (1/1일은 월요일)
(시작요일 +1)%7 의 나머지 값 으로 그 달의 시작 요일을 측정
(ex;
3월의 경우 31(1월)+28(2월)+1 = 60,
60%7 = 4(목요일), 3월의 시작일은 목요일 )
오늘 한 실습 내용으로 바탕으로 좀 더 진보된(?) 프로그램을 구현해
보겠습니다.
<5주차 과제>
1.기념일 계산 프로그램
입력 : 오늘은 ( )년 ( )월 ( )일 로부터
출력 : ( )일째 되는 날입니다.
2.D-Day 계산
입력 : ()년 ()월 ()일 까지의 D-Day는?
출력 : ()일 남았습니다.
*/
/* 조혜정박사과정 조교님이 보내준것.
#define 이름
#include < stdio.h>
Void main()
{
#ifdef 이름
소스코드
#else
#endif
}
*/
닫기