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










