C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[7731] Re:Re:Re:디스플레이 숫자오류입니다.
경호 [ansoni19] 1238 읽음    2001-05-24 13:11
안녕하세요 경호입니다.
답변이 좀 늦었네요 점심을 먹고 난후 잠간 시간이 나서 코드를 들여다 보았습니다.
음 일단 코드상에 문제가 있군요 당연히 코드에 문제가 있어서 안되는 것이겠지만 ㅠ.ㅠ

가장 큰 문제점은 님이 넘기시는 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();
}

이런식으로 바꾸시면 되겠네요. 그냥 소스만 고쳐서 잘못된 부분이 있나 모르겠군요
안되면 리플을 달아 주시고요...
그리고 한가지 더 님은 프로그램에 대해서 좀더 많은 이해가 필요한것 같군요
변수와 함수 그리고 아규먼트의 개념에 대해서 좀더 공부하세요^^

프로그램에서는 가장 기본이 되는 것이니까 말이죠
그럼 공부 열심히 하세요 ^^

+ -

관련 글 리스트
7719 Re:Re:디스플레이 숫자오류입니다. kim 1286 2001/05/23
7731     Re:Re:Re:디스플레이 숫자오류입니다. 경호 1238 2001/05/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.