C/명품 C언어 프로젝트(안기수 저)

명품 C언어 프로젝트 11.2장 바이오리듬

꾸준함. 2017. 11. 12. 15:22

[응용 11.2.1]

/*

바이오리듬 결과 출력 프로그램

*/

#include <stdio.h>

#include <math.h>

 

#define PI 3.141592

 

long total_days(int year, int month, int day);

void print_biorhythm(long total, int month);

char bio_status(int val, int mod);

 

int main(void)

{

        int byr, bmon, bday;

        int tyr, tmon, tday;

        long total = 0;;

        printf("특정월의 바이오리듬 계산\n");

        printf("첫번째 날짜와 두번째 날짜를 입력하고 Enter 하세요.\n");

        printf("첫번째 날짜가 두번째 날짜보다 앞서야 합니다. \n\n");

        printf("생년 월일을 입력하세요 (ex: 1983 5 21): ");

        scanf("%d%d%d", &byr, &bmon, &bday);

        printf("보시고 싶은 년도와 월을 입력하세요. (ex: 2004 11): ");

        scanf("%d%d", &tyr, &tmon);

        tday = 1;

        total = total_days(tyr, tmon, tday) - total_days(byr, bmon, bday);

        printf("두 날짜 사이의 날짜수는 %ld일 입니다. \n\n", total);

        printf("바이오리듬 결과:\n");

        printf("\t  저조기(-), 고조기(+), 위험기(D)\n");

        print_biorhythm(total, tmon);

        return 0;

}

 

/*

기준일(1 1 1)로부터 특정일 사이의 날짜 수의 계산 함수 total_days

*/

long total_days(int year, int month, int day)

{

        int months[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

        int i;

        long total = 0L;

        //4로 나누어지는 회수-100으로 나누어지는 횟수(평년)+400으로 나누어지는 횟수

        total = (year - 1) * 365L + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;

        if (!(year % 4) && year % 100 || !(year % 400)) //윤년일 때만 2월달 일 수 하루 추가

               months[1]++;

        for (i = 0; i < month - 1; i++)

               total += months[i];

        total += day;

        return total;

}

 

/*

바이오리듬의 상태를 판단하는 함수 bio_status

*/

char bio_status(int v, int mod)

{

        char result;

        double r;

        r = sin(v*3.141592 / (mod / 2.0));

        if (r < -0.2)

               result = '-'; //저조기

        else if ((-0.2 <= r) && (r <= 0.2))

               result = 'D'; //위험기

        else

               result = '+'; //고조기

        return result;

}

 

/*

바이오리듬의 결과를 출력하는 함수 print_biorhythm

*/

void print_biorhythm(long total, int month)

{

        int dayindex;

        int physical, emotion, intellect;

        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)

        {

               for (dayindex = 1; dayindex <= 31; dayindex++)

               {

                       physical = total % 23;

                       emotion = total % 28;

                       intellect = total % 33;

                       printf("%d %2d", month, dayindex);

                       printf(" 신체:%2d %c ", physical, bio_status(physical, 23));

                       printf(" 감정:%2d %c ", emotion, bio_status(emotion, 28));

                       printf(" 지성:%2d %c\n", intellect, bio_status(intellect, 33));

                       total++;

               }

        }

        else if (month == 2)

        {

               for (dayindex = 1; dayindex <= 28; dayindex++)

               {

                       physical = total % 23;

                       emotion = total % 28;

                       intellect = total % 33;

                       printf("%d %2d", month, dayindex);

                       printf(" 신체:%2d %c ", physical, bio_status(physical, 23));

                       printf(" 감정:%2d %c ", emotion, bio_status(emotion, 28));

                       printf(" 지성:%2d %c\n", intellect, bio_status(intellect, 33));

                       total++;

               }

        }

        else

        {

               for (dayindex = 1; dayindex <= 30; dayindex++)

               {

                       physical = total % 23;

                       emotion = total % 28;

                       intellect = total % 33;

                       printf("%d %2d", month, dayindex);

                       printf(" 신체:%2d %c ", physical, bio_status(physical, 23));

                       printf(" 감정:%2d %c ", emotion, bio_status(emotion, 28));

                       printf(" 지성:%2d %c\n", intellect, bio_status(intellect, 33));

                       total++;

               }

        }

}



개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~


[참고] 명품 C언어 프로젝트 안기수 저


*개선과 확장 문제는 시간나는대로 올리겠습니다

반응형