U E D R , A S I H C RSS

Love Calculator/조현태

No older revisions available

No older revisions available



느낀점 및 설명

최초로 문제를 못읽어서 못풀뻔 했다..;;ㅁ;; 영어는 넘흐 어려워잉~>ㅃ<;;
뭐.. 그건 그렇고.. 이거 모처럼 풀고싶지 않은문제..
커플이야 사랑을 이딴걸로 확인할일 없을꺼고.. 사용하는 사람은 할일없는 솔로뿐..
솔로들의 심심풀이 땅콩을 만드는데 노력해야 하다니..아흐..슬퍼라.쳇..
커플이라면 내이름과 그녀의 이름을 입력하면 무조건 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.0152 sec