느낀점 및 설명 ¶
최초로 문제를 못읽어서 못풀뻔 했다..;;ㅁ;; 영어는 넘흐 어려워잉~>ㅃ<;;
뭐.. 그건 그렇고.. 이거 모처럼 풀고싶지 않은문제..
커플이야 사랑을 이딴걸로 확인할일 없을꺼고.. 사용하는 사람은 할일없는 솔로뿐..
솔로들의 심심풀이 땅콩을 만드는데 노력해야 하다니..아흐..슬퍼라.쳇..
커플이라면 내이름과 그녀의 이름을 입력하면 무조건 100%~라는 조건을 넣을수도 있는데..이게뭐람..ㅎ
이제는 문제도 염장질이냐~!! (괜히 문제에 화풀이 한다눙~ㅎ)
그건 그렇고 소스가 다시 C로 돌아와서 작성해 보았다.^^
처음 배운게 C여서 그런지.. 왠지 C가 좀더 끌리는듯..ㅎ
음.. 영호선배님의 조언을 듣고 한번 수정했어요..ㅎㅎ
어때요? 좀 나아진거 같나요?ㅎ 평가 및 조언 부탁드려용~~>ㅁ<;;
뭐.. 그건 그렇고.. 이거 모처럼 풀고싶지 않은문제..
커플이야 사랑을 이딴걸로 확인할일 없을꺼고.. 사용하는 사람은 할일없는 솔로뿐..
솔로들의 심심풀이 땅콩을 만드는데 노력해야 하다니..아흐..슬퍼라.쳇..
커플이라면 내이름과 그녀의 이름을 입력하면 무조건 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++ 클래스 설계 할 때 고생 하겠다... 설계상의 약간의 문제점이 있네. 메인 함수는 최대한 간단히 하고 입력만 받고 문자열을 함수로 넘겨 처리하였으면 더 간단해지지 않았을까?;;; - 이영호
헙 이번엔 씨로 했네 ㅇㅅㅇ;그런데 현태야;;; C++ 클래스 설계 할 때 고생 하겠다... 설계상의 약간의 문제점이 있네. 메인 함수는 최대한 간단히 하고 입력만 받고 문자열을 함수로 넘겨 처리하였으면 더 간단해지지 않았을까?;;; - 이영호
으흐.. 맞다!!!! 상수 처리해주는거 난 안했는데. define이나 const 이런거 귀찮아서 자꾸 안하게 되드라 ㅋㅋ ㅠㅠ 반성!!
흐흐 이문제 사실 처음 영어라서 무지 당황스러웠다 ㅋㅋ - zyint