본문 바로가기
프로그래밍일지 (고등학생 - 인문계)/자작 게임 배포 & 패치노트&프로그래밍 개인 일지

[프]달의 위상 안내 프로그램 코드

by 단월(Kilo) 2018. 12. 26.

코드가 생각보다 많이 더러울 수도 있음을 미리 알려드립니다.

몆년이 주기인지는 모르겠으나 무슨 조건이 있는 것은 확실하고 음력의 달이 반복되는 현상의 조건때문에 아마도 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을 다운로드 하실 필요가 있다고 생각합니다.


아마도 왠만하면 깔려있을 겁니다.