U E D R , A S I H C RSS

Love Calculator/조현태

�낀� � 설명

최초로 문제를 못�어서 못풀뻔 했다..;;�;; �어는 넘� 어려워잉~>ㅃ<;;
�.. 그건 그렇고.. �거 모처럼 풀고싶지 않�문제..
커플�야 사랑� �딴걸로 확�할� 없�꺼고.. 사용하는 사람� 할�없는 솔로�..
솔로들� 심심풀� 땅콩� 만드는� 노력해야 하다니..아�..슬��.쳇..
커플��면 내�름과 그녀� �름� 입력하면 무조건 100%~�는 조건� 넣�수� 있는�..�게�람..ㅎ
�제는 문제� 염장질��~!! (괜히 문제� 화풀� 한다눙~ㅎ)

그건 그렇고 소스가 다시 C로 �아와서 작성해 보았다.^^
처� 배운게 C여서 그런지.. 왠지 C가 좀� �리는듯..ㅎ

�.. �호선배님� 조언� 듣고 한번 수정했어요..ㅎㅎ
어때요? 좀 나아진거 같나요?ã…Ž í�‰ê°€ ë°� ì¡°ì–¸ ë€íƒ�드려용~~>ã…�<;;

소스

~cpp 
#include <stdio.h>

const int MAX_SIZE_NAME=25;
const int BACK_SPACE=8; 

int calculator(int);

void main()
{
	int name_score[2];
	for (register int i=0; i<2; ++i)
	{
		char temp_save_name[MAX_SIZE_NAME]={0,};
		printf ("%d번째 사람� �름� 입력해주세요.\n>>",i+1);
		scanf ("%s",temp_save_name);
		for (register int j=0; j<MAX_SIZE_NAME; ++j)
		{
			if (64<temp_save_name[j] && temp_save_name[j]<91)       // 대문� 입력
				name_score[i]+=temp_save_name[j]-64;
			else if (96<temp_save_name[j] && temp_save_name[j]<123) // 소문� 입력
				name_score[i]+=temp_save_name[j]-96;
			else if (NULL==temp_save_name[j])
				break;
		}
		name_score[i]=calculator(name_score[i]);
	}
	float result_percent;
	if (name_score[0]>name_score[1])
		result_percent=(float)name_score[1]*100/(float)name_score[0];
	else
		result_percent=(float)name_score[0]*100/(float)name_score[1];
	printf("�사람� 사랑� %.2f%%입니다.",result_percent);
}

int calculator(int number)
{
	if (number<10)
		return number;
	else
	{
		int temp_number=0;
		while (number>0)
		{
			temp_number+=number%10;
			number/=10;
		}
		return calculator(temp_number);
	}
}

수정버전


~cpp 
#include <stdio.h>
#include <ctype.h>
#include <conio.h>

const int MAX_SIZE_NAME=25;
const int BACK_SPACE=8; 
const int ENTER=13; 

void input_and_calculate(int*);
int input_and_return_cursur(char*, int);
void calculate(char*, int, int*, int);
int input_to_calculator(int);
void output(int*);

void main()
{
	int name_score[2];
	input_and_calculate(name_score);
	output(name_score);
}

void input_and_calculate(int *name_score)
{
	for (register int i=0; i<2; ++i)
	{
		char temp_save_name[MAX_SIZE_NAME]={0,};
		calculate(temp_save_name, input_and_return_cursur(temp_save_name, i), name_score, i);
		printf ("\n");
	}
}


int input_and_return_cursur(char *temp_save_name, int i)
{
	int cursur=0;
	printf ("%d번째 사람� �름� 입력해주세요.\n>>",i+1);
	while (cursur<MAX_SIZE_NAME) 
	{ 
		char temp_char; 
		temp_char=getche();
		if (BACK_SPACE==temp_char) 
		{ 
			printf(" \b");
			--cursur; 
		}
		else if(ENTER==temp_char)
			break;
		else
		{
			temp_save_name[cursur]=temp_char;
			++cursur;
		}
	}
	return cursur;
}

void calculate(char *temp_save_name, int cursur, int *name_score, int i )
{

	for (register int j=0; j<cursur; ++j)
	{
		tolower(temp_save_name[j]);
		if ('a'<=temp_save_name[j] && temp_save_name[j]<='z')
			name_score[i]+=temp_save_name[j]-'a'+1;
	}
	name_score[i]=input_to_calculator(name_score[i]);
}

int input_to_calculator(int number)
{
	if (number<10)
		return number;
	else
	{
		int temp_number=0;
		while (number>0)
		{
			temp_number+=number%10;
			number/=10;
		}
		return input_to_calculator(temp_number);
	}
}

void output(int *name_score)
{
	float result_percent;
	if (name_score[0]>name_score[1])
		result_percent=(float)name_score[1]*100/(float)name_score[0];
	else
		result_percent=(float)name_score[0]*100/(float)name_score[1];
	printf("�사람� 사랑지수는 %.2f%%입니다.",result_percent);
}

나�게 할고싶� �

tolower(해당문�를 소문�로 바꿔줌, 소문�면 그대로)함수 �는 toupper(대문�로)를 쓰고 알파벳�서 숫�가 아닌 문�(alpha = alpha - 'a' +1)로 처리 하였다면 대소문� 따로 처리할 필요 없었고, 가�성 �한 좋아지지 않았�까? - ��호
그런� 현태야;;; C++ �래스 설계 할 때 고� 하겠다... 설계�� 약간� 문제�� 있네. 메� 함수는 최대한 간단히 하고 입력만 받고 문�열� 함수로 넘겨 처리하였으면 � 간단해지지 않았�까?;;; - ��호

헙 �번엔 씨로 했네 ㅇㅅㅇ;
으�.. 맞다!!!! �수 처리해주는거 난 안했는�. define�나 const �런거 귀찮아서 �꾸 안하게 �드� ㅋㅋ ㅠㅠ 반성!!
�� �문제 사실 처� �어�서 무지 당황스러웠다 ㅋㅋ - zyint

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:40
Processing time 0.1051 sec