[ create a new paste ] login | about

Link: http://codepad.org/dFALp0so    [ raw code | fork ]

kabhwan - C, pasted on Jul 9:
// Codepad 에서 sin() 을 인식못함... 그래서 실행은 안 걸어둠

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

#define BIORHYTHM_PI		3.141592

#define ROUND_DOUBLE(x)		((x > 0.0) ? floor(x+.5) : ceil(x-.5))

enum
{
	PHYSICAL,
	EMOTIONAL,
	INTELLECTUAL
};

#define PHYSICAL_CYCLE_DAYS			(23)
#define EMOTIONAL_CYCLE_DAYS		(28)
#define INTELLECTUAL_CYCLE_DAYS		(33)

//double round(double x);
int getBiorhythm(int days, int mode);

int get_age_in_days(int year, int month, int day);

int main(void)
{
	int days;

	days = get_age_in_days(1984, 3, 2);

	printf("%d days - phy : %d, emo : %d, int : %d\n", 
		days,
		getBiorhythm(days, PHYSICAL),
		getBiorhythm(days, EMOTIONAL),
		getBiorhythm(days, INTELLECTUAL) 
		);

	return 0;
}

/*
double round(double x) {
    return ((x>0) ? floor(x+.5) : ceil(x-.5));
}
*/

int getBiorhythm(int days, int mode)
{
	int cycle = 0;

	switch(mode)
	{
	case PHYSICAL:
		cycle = PHYSICAL_CYCLE_DAYS;
		break;

	case EMOTIONAL:
		cycle = EMOTIONAL_CYCLE_DAYS;
		break;

	case INTELLECTUAL:
		cycle = INTELLECTUAL_CYCLE_DAYS;
		break;

	default:
		cycle = 0;
	}

	return (int)(ROUND_DOUBLE(sin(days * 2 * BIORHYTHM_PI / cycle) * 100.0));
	//return (int)(round(sin(days * 2 * BIORHYTHM_PI / cycle) * 100.0));
}


int get_age_in_days(int year, int month, int day)
{
	struct tm * local_tm, birth_tm;
	time_t current_t, birth_t;

	double diff_sec;
	
	birth_tm.tm_sec = 0;
	birth_tm.tm_min = 0;
	birth_tm.tm_hour = 0;

	birth_tm.tm_mday = day;
	birth_tm.tm_mon = month - 1;	// Month - 1
	birth_tm.tm_year = year - 1900;	// from 1900

	birth_tm.tm_isdst = -1;

	birth_t = mktime(&birth_tm);

	time(&current_t);
	local_tm = localtime(&current_t);

	diff_sec = difftime(current_t, birth_t);

	// 1 days = 24 * 60 * 60
	// then floor
	return (int)(diff_sec / (24 * 60 * 60));
}


Create a new paste based on this one


Comments: