지금 제가 화학 반응 계산기라는 것을 만들게 되었습니다.

물론 제가 지금 지원하는 산성은 3개

염기성은 2개로 고2 수준(?)의 화1을 배우는 내용을 다루고 있습니다.


내용으로는 산성을 띄는 화학식과 염기성을 띄는 화학식 하나가 만나게 되어서 중화 반응이 일어나는 내용입니다.



#include <stdio.h>

#include <Windows.h>

#include <stdlib.h>

#include <string.h>


//false 0

//true 1


#define max_max 15


int main() {

int hydrogen_chloride = 0; //염화수소를 불러오고 거짓의 형태로 바꾼다.

int sulfuric_acid = 0; //황산을 불러오고 거짓의 형태로 바꾼다.

int nitric_acid = 0; //질산을 불러오고 거짓의 형태로 바꾼다.

int sodium_hydroxide = 0; //수산화나트륨을 불러오고 거짓의 형태로 바꾼다.

int potassium_hydroxide = 0; //수산화칼슘을 불러오고 거짓의 형태로 바꾼다.


int aCid = 0; //산성 용액이 있는 지 없는 지를 판단하는 수단으로 거짓의 형태로 바꾼다.

int bAsic = 0; //염기성 용액이 있는 지 없는 지를 판단하는 수단으로 거짓의 형태로 바꾼다.


char acid[1][max_max]; //산성을 입력하는 15칸 짜리를 만든다.

char basic[1][max_max];//염기성을 입력하는 15칸 짜리를 만든다.


float acidic_solution; //산성의 용액양

float base_solution;   //염기성의 용액양


float acidic_Concentration; //산성 농도

float base_Concentration;  //염기성 농도


float acidic_end; //산성 용액과 농도 총 합

float base_end; //염기성 용액과 농도 총 합

int i; //반복을 담당함


printf("입력하는 방식은 다양합니다.\n물의 화학식으로 예를 들면\nH(2)O으로 입력을 해야 합니다.\n");

printf("그러면 먼저 산성을 입력해 주세요 : ");

aCid = 0; //산성이 달성이 되었는가 아닌가를 판단하는 것이므로 거짓으로 셋팅

bAsic = 0;//염기성이 달성이 되었는가 아닌가를 판단하는 것이므로 거짓으로 셋팅

gets(acid); //산성을 입력하여 산성이라는 변수에 저장을 함

getchar(); //버퍼(입력란)을 초기화함

printf("산성 용액의 ml당 농도는 얼마로 설정할까요? 기본은 1입니다. : "); 

scanf_s("%d", &acidic_Concentration); //산성의 농도를 입력받아 농도를 담당하는 변수에 저장함

getchar();//버퍼(입력란)을 초기화함

printf("\n산성 용액의 양은 어느 정도로 할까요?? (단위는 ml) : ");

scanf_s("%d", &acidic_solution); //산성의 용액 양을 입력받아 양을 담당하는 변수에 저장함

getchar();//버퍼(입력란)을 초기화함

printf("\n그러면 이제 염기성의 용액을 입력해 주세요 : ");

gets(basic);//염기성을 입력하여 염기성이라는 변수에 저장을 함

getchar(); //버퍼(입력란)을 초기화함

printf("염기성 용액의 ml당 농도는 얼마로 설정할까요? 기본은 1입니다. : ");

scanf_s("%d", &base_Concentration); //염기성의 농도를 입력받아 농도를 담당하는 변수에 저장함

getchar();//버퍼(입력란)을 초기화함

printf("\n염기성 용액의 양은 어느 정도로 할까요?? (단위는 ml) : ");

scanf_s("%d", &base_solution); //염기성의 용액 양을 입력받아 양을 담당하는 변수에 저장함

printf("\n");



acidic_end = acidic_Concentration * acidic_solution; //농도의 정도를 파악하기 위해 용액의 양과 농도를 곱함

base_end = base_solution * base_Concentration; //농도의 정도를 파악하기 위해 용액의 양과 농도를 곱함


for (i = 0; i < 15; i++) {

if (acid[i] == 'H' && acid[i + 1] == 'C' && acid[i + 2] == 'l') { 

hydrogen_chloride = 1;

sulfuric_acid = 0;

nitric_acid = 0;

aCid = 1;

break;

}

}

if (aCid == 0) {

for (i = 0; i < 15; i++) {

if (acid[i] == 'H'&& acid[i + 1] == '('&& acid[i + 2] == '2'&& acid[i + 3] == ')'&& acid[i + 4] == 'S'&& acid[i + 5] == 'O'&&acid[i + 6] == '('&&acid[i + 7] == '4'&&acid[i + 8] == ')') {

hydrogen_chloride = 0;

sulfuric_acid = 1;

nitric_acid = 0;

aCid = 1;

break;

}

}

}

if (aCid == 0) {

for (i = 0; i < 15; i++)

if (acid[i] == 'H' && acid[i + 1] == 'N' && acid[i + 2] == 'O' && acid[i + 3] == '(' && acid[i + 4] == '3' && acid[i + 5] == ')') {

hydrogen_chloride = 0;

sulfuric_acid = 0;

nitric_acid = 1;

aCid = 1;

break;

}

}


for (i = 0; i < 15; i++) {

if (basic[i] == 'N' && basic[i + 1] == 'a' && basic[i + 2] == 'O' && basic[i + 3] == 'H') {

sodium_hydroxide = 1;

potassium_hydroxide = 0;

bAsic = 1;

break;

}

}

if (bAsic == 0) {

for (i = 0; i < 15; i++) {

if (basic[i] == 'C' && basic[i + 1] == 'a' && basic[i + 2] == '(' && basic[i + 3] == 'O' && basic[i + 4] == 'H'&&basic[i + 5] == ')'&&basic[i + 6] == '('&&basic[i + 7] == '3'&&basic[i + 8] == ')') {

sodium_hydroxide = 0;

potassium_hydroxide = 0;

bAsic = 1;

break;

}

}

}



if (acidic_end < base_end) {

printf("반응 후의 용액은 염기성이 됩니다.\n");

}

else if (acidic_end == base_end) {

printf("반응 후의 용액은 중성이 됩니다.\n");

}

else if (acidic_end > base_end) {

printf("반응 후의 용액은 산성이 됩니다.\n");

}


if (hydrogen_chloride == 1 && sodium_hydroxide == 1) { //염화수소하고 수산화나트륨반응

printf("H(2)O  +  Cl^-  +  Na^+ 가 반응 후 화학식이 됩니다.\n");

}

if (hydrogen_chloride == 1 && potassium_hydroxide == 1) { //염화수소하고 수산화칼슘반응

printf("H(2)O  +  Cl^-  +  Ca^+ 가 반응 후 화학식이 됩니다.\n");

}

if (sulfuric_acid == 1 && sodium_hydroxide == 1) { //황산하고 수산화나트륨반응

printf("H(2)O  +  H^+  +  SO(4)^-  +  Na^- 가 반응 후 화학식이 됩니다.\n");

}

if (sulfuric_acid == 1 && potassium_hydroxide == 1) { //황산하고 수산화칼슘반응

printf("H(2)O  +  H^+  +  SO(4)^-  +  Ca^- 가 반응 후 화학식이 됩니다.\n");

}

if (nitric_acid == 1 && sodium_hydroxide == 1) { //질산하고 수산화나트륨반응

printf("H(2)O  +  NO(3)^-  +  Na^- 가 반응 후 화학식이 됩니다.\n");

}

if (nitric_acid == 1 && potassium_hydroxide == 1) { //질산하고 수산화칼슘반응

printf("H(2)O  +  NO(3)^-  +  Ca^- 가 반응 후 화학식이 됩니다.\n");

}

printf("\n\n\n");

getchar();

return 0;

}

해당 코드는 전부 공개 처리를 하도록 하겠습니다.

해당 코드는 아마 제 글을 읽으셨더라면 이해하는 것에 관해서는 무리가 없게 하였습니다.


주석을 전부 읽으신다면 아마도 가능하지 않을까 싶습니다.


해당 코드는 버그가 있는 코드이므로 새로 수정한 코드를 올리도록 하겠습니다.

#include <stdio.h>

#include <Windows.h>

#include <stdlib.h>

#include <string.h>


//false 0

//true 1


#define max_max 15


int main() {

int hydrogen_chloride = 0; //염화수소를 불러오고 거짓의 형태로 바꾼다.

int sulfuric_acid = 0; //황산을 불러오고 거짓의 형태로 바꾼다.

int nitric_acid = 0; //질산을 불러오고 거짓의 형태로 바꾼다.

int sodium_hydroxide = 0; //수산화나트륨을 불러오고 거짓의 형태로 바꾼다.

int potassium_hydroxide = 0; //수산화칼슘을 불러오고 거짓의 형태로 바꾼다.


int aCid = 0; //산성 용액이 있는 지 없는 지를 판단하는 수단으로 거짓의 형태로 바꾼다.

int bAsic = 0; //염기성 용액이 있는 지 없는 지를 판단하는 수단으로 거짓의 형태로 바꾼다.


char acid[1][max_max]; //산성을 입력하는 15칸 짜리를 만든다.

char basic[1][max_max];//염기성을 입력하는 15칸 짜리를 만든다.


float acidic_solution; //산성의 용액양

float base_solution;   //염기성의 용액양


float acidic_Concentration; //산성 농도

float base_Concentration;  //염기성 농도


float acidic_end; //산성 용액과 농도 총 합

float base_end; //염기성 용액과 농도 총 합

int i; //반복을 담당함


//char *ptr_acid; // 산성의 체크

//char *ptr_base; // 염기의 체크


printf("입력하는 방식은 다양합니다.\n물의 화학식으로 예를 들면\nH(2)O으로 입력을 해야 합니다.\n");

printf("그러면 먼저 산성을 입력해 주세요 : ");

aCid = 0; //산성이 달성이 되었는가 아닌가를 판단하는 것이므로 거짓으로 셋팅

bAsic = 0;//염기성이 달성이 되었는가 아닌가를 판단하는 것이므로 거짓으로 셋팅

gets(acid); //산성을 입력하여 산성이라는 변수에 저장을 함

getchar(); //버퍼(입력란)을 초기화함

printf("산성 용액의 ml당 농도는 얼마로 설정할까요? 기본은 1입니다. : "); 

scanf_s("%d", &acidic_Concentration); //산성의 농도를 입력받아 농도를 담당하는 변수에 저장함

getchar();//버퍼(입력란)을 초기화함

printf("\n산성 용액의 양은 어느 정도로 할까요?? (단위는 ml) : ");

scanf_s("%d", &acidic_solution); //산성의 용액 양을 입력받아 양을 담당하는 변수에 저장함

getchar();//버퍼(입력란)을 초기화함

printf("\n그러면 이제 염기성의 용액을 입력해 주세요 : ");

gets(basic);//염기성을 입력하여 염기성이라는 변수에 저장을 함

getchar(); //버퍼(입력란)을 초기화함

printf("염기성 용액의 ml당 농도는 얼마로 설정할까요? 기본은 1입니다. : ");

scanf_s("%d", &base_Concentration); //염기성의 농도를 입력받아 농도를 담당하는 변수에 저장함

getchar();//버퍼(입력란)을 초기화함

printf("\n염기성 용액의 양은 어느 정도로 할까요?? (단위는 ml) : ");

scanf_s("%d", &base_solution); //염기성의 용액 양을 입력받아 양을 담당하는 변수에 저장함

printf("\n");



acidic_end = acidic_Concentration * acidic_solution; //농도의 정도를 파악하기 위해 용액의 양과 농도를 곱함

base_end = base_solution * base_Concentration; //농도의 정도를 파악하기 위해 용액의 양과 농도를 곱함


for (i = 0; i < 15; i++) {

if (strstr(acid, "HCl")) {

hydrogen_chloride = 1;

sulfuric_acid = 0;

nitric_acid = 0;

aCid = 1;

break;

}

}

if (aCid == 0) {

for (i = 0; i < 15; i++) {

if (strstr(acid, "H(2)SO(4)")) {

hydrogen_chloride = 0;

sulfuric_acid = 1;

nitric_acid = 0;

aCid = 1;

break;

}

}

}

if (aCid == 0) {

for (i = 0; i < 15; i++)

if (strstr(acid, "HNO(3)")) {

hydrogen_chloride = 0;

sulfuric_acid = 0;

nitric_acid = 1;

aCid = 1;

break;

}

}


for (i = 0; i < 15; i++) {

if (strstr(basic, "NaOH")) {

sodium_hydroxide = 1;

potassium_hydroxide = 0;

bAsic = 1;

break;

}

}

if (bAsic == 0) {

for (i = 0; i < 15; i++) {

if (strstr(basic, "Ca(OH)(2)")) {

sodium_hydroxide = 0;

potassium_hydroxide = 0;

bAsic = 1;

break;

}

}

}



if (acidic_end < base_end) {

printf("반응 후의 용액은 염기성이 됩니다.\n");

}

else if (acidic_end == base_end) {

printf("반응 후의 용액은 중성이 됩니다.\n");

}

else if (acidic_end > base_end) {

printf("반응 후의 용액은 산성이 됩니다.\n");

}


if (hydrogen_chloride == 1 && sodium_hydroxide == 1) { //염화수소하고 수산화나트륨반응

printf("H(2)O  +  Cl^-  +  Na^+ 가 반응 후 화학식이 됩니다.\n");

}

if (hydrogen_chloride == 1 && potassium_hydroxide == 1) { //염화수소하고 수산화칼슘반응

printf("H(2)O  +  Cl^-  +  Ca^+ 가 반응 후 화학식이 됩니다.\n");

}

if (sulfuric_acid == 1 && sodium_hydroxide == 1) { //황산하고 수산화나트륨반응

printf("H(2)O  +  H^+  +  SO(4)^-  +  Na^- 가 반응 후 화학식이 됩니다.\n");

}

if (sulfuric_acid == 1 && potassium_hydroxide == 1) { //황산하고 수산화칼슘반응

printf("H(2)O  +  H^+  +  SO(4)^-  +  Ca^- 가 반응 후 화학식이 됩니다.\n");

}

if (nitric_acid == 1 && sodium_hydroxide == 1) { //질산하고 수산화나트륨반응

printf("H(2)O  +  NO(3)^-  +  Na^- 가 반응 후 화학식이 됩니다.\n");

}

if (nitric_acid == 1 && potassium_hydroxide == 1) { //질산하고 수산화칼슘반응

printf("H(2)O  +  NO(3)^-  +  Ca^- 가 반응 후 화학식이 됩니다.\n");

}

printf("\n\n\n");

Sleep(12300);

return 0;

}

아래의 것은 재귀함수를 통한 반복과 키보드에서 나가는 명령어를 추가하였습니다.

#include <stdio.h>

#include <Windows.h>

#include <stdlib.h>

#include <string.h>


//false 0

//true 1


#define max_max 15


int main() {

int hydrogen_chloride = 0; //염화수소를 불러오고 거짓의 형태로 바꾼다.

int sulfuric_acid = 0; //황산을 불러오고 거짓의 형태로 바꾼다.

int nitric_acid = 0; //질산을 불러오고 거짓의 형태로 바꾼다.

int sodium_hydroxide = 0; //수산화나트륨을 불러오고 거짓의 형태로 바꾼다.

int potassium_hydroxide = 0; //수산화칼슘을 불러오고 거짓의 형태로 바꾼다.


int aCid = 0; //산성 용액이 있는 지 없는 지를 판단하는 수단으로 거짓의 형태로 바꾼다.

int bAsic = 0; //염기성 용액이 있는 지 없는 지를 판단하는 수단으로 거짓의 형태로 바꾼다.


char acid[1][max_max]; //산성을 입력하는 15칸 짜리를 만든다.

char basic[1][max_max];//염기성을 입력하는 15칸 짜리를 만든다.


int acidic_solution; //산성의 용액양

int base_solution;   //염기성의 용액양


int acidic_Concentration; //산성 농도

int base_Concentration;  //염기성 농도


int acidic_end; //산성 용액과 농도 총 합

int base_end; //염기성 용액과 농도 총 합

int i; //반복을 담당함


//char *ptr_acid; // 산성의 체크

//char *ptr_base; // 염기의 체크


printf("입력하는 방식은 다양합니다.\n물의 화학식으로 예를 들면\nH(2)O으로 입력을 해야 합니다.\n");

printf("종료하시려면 산성 입력시에 'x'만 입력해 주세요\n");

printf("그러면 먼저 산성을 입력해 주세요 : ");

aCid = 0; //산성이 달성이 되었는가 아닌가를 판단하는 것이므로 거짓으로 셋팅

bAsic = 0;//염기성이 달성이 되었는가 아닌가를 판단하는 것이므로 거짓으로 셋팅

gets(acid); //산성을 입력하여 산성이라는 변수에 저장을 함

getchar(); //버퍼(입력란)을 초기화함

if (strstr(acid, "x")) {

return 0;

}

printf("산성 용액의 ml당 농도는 얼마로 설정할까요? 기본은 1입니다. : "); 

scanf_s("%d", &acidic_Concentration);

getchar();//버퍼(입력란)을 초기화함

printf("\n산성 용액의 양은 어느 정도로 할까요?? (단위는 ml) : ");

scanf_s("%d", &acidic_solution); //산성의 용액 양을 입력받아 양을 담당하는 변수에 저장함

acidic_end = acidic_Concentration * acidic_solution;

getchar();//버퍼(입력란)을 초기화함

printf("\n그러면 이제 염기성의 용액을 입력해 주세요 : ");

gets(basic);//염기성을 입력하여 염기성이라는 변수에 저장을 함

getchar(); //버퍼(입력란)을 초기화함

printf("염기성 용액의 ml당 농도는 얼마로 설정할까요? 기본은 1입니다. : ");

scanf_s("%d", &base_Concentration); //염기성의 농도를 입력받아 농도를 담당하는 변수에 저장함

getchar();//버퍼(입력란)을 초기화함

printf("\n염기성 용액의 양은 어느 정도로 할까요?? (단위는 ml) : ");

scanf_s("%d", &base_solution); //염기성의 용액 양을 입력받아 양을 담당하는 변수에 저장함

getchar();

base_end = base_Concentration * base_solution;

printf("\n");



//acidic_end = acidic_Concentration * acidic_solution; //농도의 정도를 파악하기 위해 용액의 양과 농도를 곱함

//base_end = base_solution * base_Concentration; //농도의 정도를 파악하기 위해 용액의 양과 농도를 곱함



//acidic_end = acidic_Concentration * acidic_solution;

//printf("%d\n", acidic_end);

//base_end = base_Concentration * base_solution;

//printf("%d\n", base_end);



for (i = 0; i < 15; i++) {

if (strstr(acid, "HCl")) {

hydrogen_chloride = 1;

sulfuric_acid = 0;

nitric_acid = 0;

aCid = 1;

break;

}

}

if (aCid == 0) {

for (i = 0; i < 15; i++) {

if (strstr(acid, "H(2)SO(4)")) {

hydrogen_chloride = 0;

sulfuric_acid = 1;

nitric_acid = 0;

aCid = 1;

break;

}

}

}

if (aCid == 0) {

for (i = 0; i < 15; i++)

if (strstr(acid, "HNO(3)")) {

hydrogen_chloride = 0;

sulfuric_acid = 0;

nitric_acid = 1;

aCid = 1;

break;

}

}


for (i = 0; i < 15; i++) {

if (strstr(basic, "NaOH")) {

sodium_hydroxide = 1;

potassium_hydroxide = 0;

bAsic = 1;

break;

}

}

if (bAsic == 0) {

for (i = 0; i < 15; i++) {

if (strstr(basic, "Ca(OH)(2)")) {

sodium_hydroxide = 0;

potassium_hydroxide = 0;

bAsic = 1;

break;

}

}

}



if (acidic_end < base_end) {

printf("반응 후의 용액은 염기성이 됩니다.\n");

}

else if (acidic_end == base_end) {

printf("반응 후의 용액은 중성이 됩니다.\n");

}

else if (acidic_end > base_end) {

printf("반응 후의 용액은 산성이 됩니다.\n");

}


if (hydrogen_chloride == 1 && sodium_hydroxide == 1) { //염화수소하고 수산화나트륨반응

printf("H(2)O  +  Cl^-  +  Na^+ 가 반응 후 화학식이 됩니다.\n");

}

if (hydrogen_chloride == 1 && potassium_hydroxide == 1) { //염화수소하고 수산화칼슘반응

printf("H(2)O  +  Cl^-  +  Ca^+ 가 반응 후 화학식이 됩니다.\n");

}

if (sulfuric_acid == 1 && sodium_hydroxide == 1) { //황산하고 수산화나트륨반응

printf("H(2)O  +  H^+  +  SO(4)^2-  +  Na^- 가 반응 후 화학식이 됩니다.\n");

}

if (sulfuric_acid == 1 && potassium_hydroxide == 1) { //황산하고 수산화칼슘반응

printf("H(2)O  +  H^+  +  SO(4)^2-  +  Ca^- 가 반응 후 화학식이 됩니다.\n");

}

if (nitric_acid == 1 && sodium_hydroxide == 1) { //질산하고 수산화나트륨반응

printf("H(2)O  +  NO(3)^-  +  Na^- 가 반응 후 화학식이 됩니다.\n");

}

if (nitric_acid == 1 && potassium_hydroxide == 1) { //질산하고 수산화칼슘반응

printf("H(2)O  +  NO(3)^-  +  Ca^- 가 반응 후 화학식이 됩니다.\n");

}

printf("\n\n\n");

main();

return 0;

}


블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,

제가 3D에 대한 역량이 부족한 것인지 아닌지는 모르겠으나

요즘 게임도 재미있....(쿨럭

아무튼 일본어 번역건도 있고 여러가지 이유로 3D게임에 대한 개발을 중지하고

Civil War의 후속작을 만들어보려고 합니다.

이번에는 C언어를 이용하지 않고 유니티를 이용해볼까도 생각하고 있습니다.


그리고 Civil War의 사후관리(?)를 중단하겠습니다.

더이상 제가 건드는 것은 코드를 좀더 꼬아버리는 행위가 되므로 무언가의 버그가 계속 생길것으로 예상이 됩니다.


그래서 후속작을 많이 기대해 주시기를 바랍니다.


제가 아마 2월달 전에는 만들지 않을까하고 조심스럽게 생각합니다.


블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,

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

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


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

블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,