|
안녕하세요 경호입니다.
답변이 좀 늦었네요 점심을 먹고 난후 잠간 시간이 나서 코드를 들여다 보았습니다.
음 일단 코드상에 문제가 있군요 당연히 코드에 문제가 있어서 안되는 것이겠지만 ㅠ.ㅠ
가장 큰 문제점은 님이 넘기시는 NbrInteger의 값에 문제가 있군요 그리고
배열의 인덱스 값에도 물론 문제가 있구요. 그리고 소트된 결과를 표시하는 놈과
원래 값을 표시하는 구문도 잘못되어 있습니다.
NbrInteger값을 2번에서 함수로 넘길때 초기화 및 설정된 값을 넘기지 않고 있기
때문에 무한 루프에 빠지는 군요 ...
일단 약간 고쳐보지요...
void DisplayIntroduction(void);
void DisplayMainMenu(void);
int GetMenuSelection(int Min, int Max);
void MenuSelection(int Select);
void GetIntegers(int Nums[], int ); // 리턴값이 필요 없군요...
void DisplayStatistics (int Nums[], int); // 리턴값이 필요 없군요...
void Pause(void);
const int MAX_NBR_INTEGERS = 30;
int Nums[MAX_NBR_INTEGERS];
static int NbrInteger=0; // 전반적으로 쓰이는 값이군요 귀찬아서 전역으로 선언 했슴당.
void main()
{
int menu = -1; // 초기화 안해두 상관은 없지만 ...
clrscr();
DisplayIntroduction();
while(1)
{
DisplayMainMenu();
menu=GetMenuSelection(0,3);
if(menu==1)GetIntegers(Nums,NbrInteger);
else if(menu==2)DisplayStatistics(Nums, NbrInteger);
else if(menu==3)cout << "원래 있던 글자 ?"; // AUμa¸| ³O¾i¼¼¿a.
else if(menu==0)goto end;
}
end:;
}
void DisplayIntroduction(void)
{
cout <<"This program calculates the mean, median, and mode"
<<"\nof up to 30 integers (each between 0 and 9)";
}
void DisplayMainMenu(void)
{
cout <<"\n\nMain Menu"
<<"\n\t1. Enter integers"
<<"\n\t2. Display statistics"
<<"\n\t3. Clear integers"
<<"\n\t0. Exit"
<< "\n Choose an option ==> : ";
}
int GetMenuSelection (int Min, int Max)
{
int Select;
cin >> Select;
while((Select < Min)||(Select > Max))
{
cout << "\n ********** Error ********** !" << endl
<< " Please enter number in range 0 to 3 > ";
cin >> Select;
}
return Select;
}
void GetIntegers(int Nums[], int )
{
int i=0; //,NbrInteger 필요없는 놈이군요 ^^;
cout <<"\nEnter a string of integers (each between 0 and 9),ending in -1."
<<"\nAny more than 30 integers will be ignored."
<<"\nExample: 9 3 3 4 1 1 7 2 -1\n";
while ((i < 30)||(Nums[i] == -1))
{
cin >> Nums[i];
if ((Nums[i] >9)||(Nums[i] < -1))
{
cout << "\nERROR:An invalid integer has been ignored: ";
cout << Nums[i]<< "\n";
}
else if (Nums[i] == -1)
break;
else if(i > 30)
{
cout << "\nERROR ";
}
i++; //입력된 아이템의 갯수에 따라서 증가해야 겠지요
}
NbrInteger = i+1; // i의 초기값이 0이라서 1을 증가 시켰어요.
//return Nums[i]; // 필요 없겠죠
}
void DisplayStatistics (int Nums[], int NbrInteger)
{
cout << "Sorting Integers\n"
<< "\n================"
<< "\nThe unsorted integers:\n" ;
int number;
for ( int i = 0; i < NbrInteger-1; i++ ) // 배열의 마지막 놈인 -1까지 저장을 하더군요.
{
cout << Nums[i] << " "; //저장되어 있는놈의 값은 배열의 값이겠지요 ^^
number = i;
}
cout << number+1; // 물론 i가 0부터 시작하기 땜시 1을 더했습니다.
int i, j, temp, moves = 0;
cout << "The sorted integers:\n";
for (i = 0; i < (NbrInteger - 1); i++) // 배열의 마지막 놈인 -1까지 저장을 하더군요.
{
for(j = 1; j <NbrInteger-1; j++) // 배열의 마지막 놈인 -1까지 저장을 하더군요.
{ // 맨 마지막 놈은 검사하는데서 빼야 겠지요^^
if (Nums[j] < Nums[j-1])
{
temp = Nums[j];
Nums[j] = Nums[j-1];
Nums[j-1] = temp;
moves++;
}
}
}
// 당연히 결과를 출력할 놈이 있어야 겠지요 ^^
for ( int i = 0; i < NbrInteger-1; i++ )
{
cout << Nums[i] << " ";
}
Pause();
//return moves; // 필요없는 놈이지요..
}
void Pause(void)
{
cout<<"\n\n Press any key to continue...";
getch();
}
이런식으로 바꾸시면 되겠네요. 그냥 소스만 고쳐서 잘못된 부분이 있나 모르겠군요
안되면 리플을 달아 주시고요...
그리고 한가지 더 님은 프로그램에 대해서 좀더 많은 이해가 필요한것 같군요
변수와 함수 그리고 아규먼트의 개념에 대해서 좀더 공부하세요^^
프로그램에서는 가장 기본이 되는 것이니까 말이죠
그럼 공부 열심히 하세요 ^^
|