코드가 생각보다 많이 더러울 수도 있음을 미리 알려드립니다.
몆년이 주기인지는 모르겠으나 무슨 조건이 있는 것은 확실하고 음력의 달이 반복되는 현상의 조건때문에 아마도 2099년까지 유효한 프로그램이 될 것 같습니다.
만약 조건을 아시는 분이 이 블로그에 오게 된다면 댓글로 알려주시면 감사할 것 같습니다.
그럼 프로그램과 함께 코드를 수정조치를 취하겠습니다.
#include <time.h>
#include <stdio.h>
#include <Windows.h>
#include <stdlib.h>
#include <string.h>
#define WA 32
#define bool int
#define true 1
#define false 0
/*int main() {
struct tm *localtime(const time_t *timer);
struct tm *date;
const time_t t = time(NULL);
처음:
date = localtime(&t);
printf(
"%d/%d/%d %d:%d:%d\n", date->tm_year + 1900, date->tm_mon + 1,
date->tm_mday, date->tm_hour, date->tm_min, date->tm_sec
);
Sleep(1000);
goto 처음;
getchar();
return 0;
}*/
int main() {
struct tm*localtime(const time_t *timer);
struct tm*date;
const time_t t = time(NULL);
int t_year; //양력 년
int t_mon; //양력 달
int t_day; //양력 일
//int i_year; //임시 년
//int i_mon; //임시 달
//int i_day; //임시 일
int m_year; //음력 년
int m_mon; //음력 달
int m_day; //음력 일
int Mn = 0; //깍인 수
bool no_moon = 0; //삭
bool crescent = 0; //초승달
bool waxing_moon = 0;//상현달
bool full_moon = 0;//보름달
bool last_quarter = 0;//하현달
bool dark_moon = 0;//그믐달
//윤달이 든 목록
int one_more_mon[30];
for (int iii = 0; iii == 30; iii++) {
one_more_mon[iii] = 0;
}
printf("해당 프로그램의 수명은 존재하나 어디까지인지는 모르겠습니다.\n");
printf("버그 제보는 https://kilo-staticgames-85326.tistory.com/notice/85 \n 이메일 제보는 kilo0103@naver.com또는 kyjkyj0816@naver.com \n");
printf("학교에서 나누어준 프린트에 있는 달의 관측시간을 기반으로 제작을 하였다는 것을 말하겠습니다.\n\n\n");
date = localtime(&t);
t_year = date->tm_year + 1900;
t_mon = date->tm_mon + 1;
t_day = date->tm_mday;
printf("양력은 %d년%d월%d일 %d:%d:%d\n\n",
t_year,
t_mon,
t_day,
date->tm_hour,
date->tm_min,
date->tm_sec);
for (;;) {
if (t_year == 2018 && t_mon == 12 && t_day == 7) {
break;
}
else {
t_day--;
Mn++;
if (t_day == 0) {
if (t_mon == 1 || t_mon == 3 || t_mon == 5 || t_mon == 7 || t_mon == 8 || t_mon == 10 || t_mon == 12) { //만약 1월,3월,5월,7월,8월,10월,12월이라면 31일로 셋팅
t_day = 31;
}
else if (t_mon == 2) { //만약 2월이라면
if (t_year % 4 == 0 || t_year % 400 == 0) { //윤년일시에 29일로 셋팅
if (t_year % 100 == 0) {
t_mon = 28;
}
else {
t_mon = 29;
}
}
else { //아니라면 28일로 셋팅
t_mon = 28;
}
}
else {//그 외는 전부 30일로 셋팅
t_day = 30;
}
t_mon--;
if (t_mon == 0) {
t_mon = 12;
t_year--;
}
}
}
}
m_year = 2018;
m_mon = 11;
m_day = 1;
/*while (AaA == Mn) {
//2월을 제외한 달은 30일이 있고 2월만 29일로 고정
printf("음력 시작\n");
m_day++;
if (m_day == 29) {
if (m_mon == 2) {
m_mon++;
m_day = 1;
}
}
else if (m_day == 30) {
m_day = 1;
if (m_mon == 12) {
m_mon = 1;
m_year++;
}
else {
m_mon++;
}
}
AaA++;
}*/
음력반복:
if (Mn == 0) {
goto 음력반복_끝;
}
else {
m_day++;
if (m_year == 2020 && m_mon == 4 && m_day == 30 && one_more_mon[0] == 0) {
one_more_mon[0] = 1;
m_day = 1;
}
else if (m_year == 2023 && m_mon == 2 && m_day == 29 && one_more_mon[1] == 0) {
one_more_mon[1] = 1;
m_day = 1;
}
else if (m_year == 2025 && m_mon == 6 && m_day == 30 && one_more_mon[2] == 0) {
one_more_mon[2] = 1;
m_day = 1;
}
else if (m_year == 2028 && m_mon == 5 && m_day == 30 && one_more_mon[3] == 0) {
one_more_mon[3] = 1;
m_day = 1;
}
else if (m_year == 2031 && m_mon == 3 && m_day == 30 && one_more_mon[4] == 0) {
one_more_mon[4] = 1;
m_day = 1;
}
else if (m_year == 2033 && m_mon == 11 && m_day == 30 && one_more_mon[5] == 0) {
one_more_mon[5] = 1;
m_day = 1;
}
else if (m_year == 2036 && m_mon == 6 && m_day == 30 && one_more_mon[6] == 0) {
one_more_mon[6] = 1;
m_day = 1;
}
else if (m_year == 2039 && m_mon == 5 && m_day == 30 && one_more_mon[7] == 0) {
one_more_mon[7] = 1;
m_day = 1;
}
else if (m_year == 2042 && m_mon == 2 && m_day == 29 && one_more_mon[8] == 0) {
one_more_mon[8] = 1;
m_day = 1;
}
else if (m_year == 2044 && m_mon == 7 && m_day == 30 && one_more_mon[9] == 0) {
one_more_mon[9] = 1;
m_day = 1;
}
else if (m_year == 2047 && m_mon == 5 && m_day == 30 && one_more_mon[10] == 0) {
one_more_mon[10] = 1;
m_day = 1;
}
else if (m_year == 2050 && m_mon == 3 && m_day == 30 && one_more_mon[11] == 0) {
one_more_mon[11] = 1;
m_day = 1;
}
else if (m_year == 2052 && m_mon == 8 && m_day == 30 && one_more_mon[12] == 0) {
one_more_mon[12] = 1;
m_day = 1;
}
else if (m_year == 2055 && m_mon == 6 && m_day == 30 && one_more_mon[13] == 0) {
one_more_mon[13] = 1;
m_day = 1;
}
else if (m_year == 2058 && m_mon == 4 && m_day == 30 && one_more_mon[14] == 0) {
one_more_mon[14] = 1;
m_day = 1;
}
else if (m_year == 2061 && m_mon == 3 && m_day == 30 && one_more_mon[15] == 0) {
one_more_mon[15] = 1;
m_day = 1;
}
else if (m_year == 2063 && m_mon == 7 && m_day == 30 && one_more_mon[16] == 0) {
one_more_mon[16] = 1;
m_day = 1;
}
else if (m_year == 2066 && m_mon == 5 && m_day == 30 && one_more_mon[17] == 0) {
one_more_mon[17] = 1;
m_day = 1;
}
else if (m_year == 2069 && m_mon == 4 && m_day == 30 && one_more_mon[18] == 0) {
one_more_mon[18] = 1;
m_day = 1;
}
else if (m_year == 2071 && m_mon == 8 && m_day == 30 && one_more_mon[19] == 0) {
one_more_mon[19] = 1;
m_day = 1;
}
else if (m_year == 2074 && m_mon == 6 && m_day == 30 && one_more_mon[20] == 0) {
one_more_mon[20] = 1;
m_day = 1;
}
else if (m_year == 2077 && m_mon == 4 && m_day == 30 && one_more_mon[21] == 0) {
one_more_mon[21] = 1;
m_day = 1;
}
else if (m_year == 2080 && m_mon == 3 && m_day == 30 && one_more_mon[22] == 0) {
one_more_mon[22] = 1;
m_day = 1;
}
else if (m_year == 2082 && m_mon == 7 && m_day == 30 && one_more_mon[23] == 0) {
one_more_mon[23] = 1;
m_day = 1;
}
else if (m_year == 2085 && m_mon == 5 && m_day == 30 && one_more_mon[24] == 0) {
one_more_mon[24] = 1;
m_day = 1;
}
else if (m_year == 2088 && m_mon == 4 && m_day == 30 && one_more_mon[25] == 0) {
one_more_mon[25] = 1;
m_day = 1;
}
else if (m_year == 2090 && m_mon == 8 && m_day == 30 && one_more_mon[26] == 0) {
one_more_mon[26] = 1;
m_day = 1;
}
else if (m_year == 2093 && m_mon == 6 && m_day == 30 && one_more_mon[27] == 0) {
one_more_mon[27] = 1;
m_day = 1;
}
else if (m_year == 2096 && m_mon == 4 && m_day == 30 && one_more_mon[28] == 0) {
one_more_mon[28] = 1;
m_day = 1;
}
else if (m_year == 2099 && m_mon == 3 && m_day == 30 && one_more_mon[29] == 0) {
one_more_mon[29] = 1;
m_day = 1;
}
if (m_day == 29) {
if (m_mon == 2) {
m_mon++;
m_day = 1;
}
}
else if (m_day == 30) {
m_day = 1;
if (m_mon == 12) {
m_mon = 1;
m_year++;
}
else {
m_mon++;
}
}
Mn--;
goto 음력반복;
}
음력반복_끝:
printf("음력은 %d년%d월%d일이고\n오늘의", m_year, m_mon, m_day);
switch (m_day) {
case 1:
no_moon = 1;
break;
case 2:
case 3:
crescent = 1;
break;
case 4:
case 5:
case 6:
case 7:
case 8:
waxing_moon = 1;
break;
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
full_moon = 1;
break;
case 16:
case 17:
case 18:
case 19:
case 20:
case 21:
case 22:
case 23:
last_quarter = 1;
break;
case 24:
case 25:
case 26:
case 27:
case 28:
case 29:
dark_moon = 1;
break;
case 30:
no_moon = 1;
break;
}
if (no_moon == 1) {
printf("달의 위상은 '삭'입니다.\n태양과 함께 뜨고 지므로 관측은 불가능 합니다.\n");
}
else if (crescent == 1) {
printf("달의 위상은 '초승달'입니다.\n뜨는 시각은 '09시'이고\n남중하는 시각으로는 '15시'이고\n지는 시각은 '21시'입니다.\n");
}
else if (waxing_moon == 1) {
printf("달의 위상은 '상현달'입니다.\n뜨는 시각은 '12시'이고\n남중하는 시각으로는 '18시'이고\n지는 시각은 '00시'입니다.\n");
}
else if (full_moon == 1) {
printf("달의 위상은 '보름달'입니다.\n뜨는 시각은 '18시'이고\n남중하는 시각으로는 '00시'이고\n지는 시각은 '06시'입니다.\n");
}
else if (last_quarter == 1) {
printf("달의 위상은 '하현달'입니다.\n뜨는 시각은 '00시'이고\n남중하는 시각으로는 '06시'이고\n지는 시각은 '12시'입니다.\n");
}
else if (dark_moon == 1) {
printf("달의 위상은 '그믐달'입니다.\n뜨는 시각은 '03시'이고\n남중하는 시각으로는 '09시'이고\n지는 시각은 '15시'입니다.\n");
}
printf("종료하시려면 '엔터'를 눌러주세요\n");
Sleep(1000);
getchar();
return 0;
}
해당 달의 위상 조건 같은 경우는 제가 다니는 학교의 학습지를 바탕으로 만들었습니다.
해당 코드는 코드를 정리하지 않았기 때문에 쓰지 않는 코드도 존재합니다.
그렇기 때문에 그 점은 알아주시고 직접 코드를 정리하시는 것은 2차 저작물로 인정하겠습니다.
또한 학교 선생님의 노트북에서 dll이 없다고 하였는데 무슨 dll인지를 확인시켜주시지 않아서 그 점은 직접 dll을 다운로드 하실 필요가 있다고 생각합니다.
아마도 왠만하면 깔려있을 겁니다.