2011-08-09 2 views
0

이 필요합니다 : 변수, 데이터 유형, 수치 사업자 기본 입/출력 논리를 (문, 문을 전환하는 경우) 루프 (대한 수행-잠시 동안) 배열팬케이크 대식가 프로그램. (C++)

프로그램을 작성 사용자는 10 명의 다른 사람들 (사람 1, 사람 2, ..., 사람 10)이 아침에 먹은 팬케이크의 수를 입력하도록 요청합니다. 데이터가 입력되면 프로그램은 데이터를 분석하고 어떤 사람이 대부분의 팬케이크는 아침 식사입니다.

★ 아침 식사로 팬케이크를 먹은 사람이 가장 적은 사람을 출력하도록 프로그램을 수정하십시오.

★★★★ 10 명 모두 먹은 팬케이크의 순으로 목록을 출력하도록 프로그램을 수정하십시오. 즉 사람 4 : 7 팬케이크 사람 8 먹었다 : 10 팬케이크 사람 3 먹은 http://codepad.org/QHnt11CT

#include <iostream> 
#include <string> 


void bubbleSort(int arr[], int n) { 
     bool swapped = true; 
     int j = 0; 
     int tmp; 
     while (swapped) { 
      swapped = false; 
      j++; 
      for (int i = 0; i < n - j; i++) { 
        if (arr[i] > arr[i + 1]) { 
         tmp = arr[i]; 
         arr[i] = arr[i + 1]; 
         arr[i + 1] = tmp; 
         swapped = true; 
        } 
      } 
     } 
} 

int main() 
{ 
    int pancakeAmount[10]; 
    std::string consumers[10]; 

    for (int i = 0, j = 1; i < 10; i++, j++) { 
     std::cout << "Please enter an amount of pancakes eaten by consumer"\ 
     " number " << j << "." << std::endl; 
     std::cin >> pancakeAmount[i]; 
     std::cout << "Please enter the name of the person who ate that amount"\ 
     " of pancakes." << std::endl; 
     getline(std::cin, consumers[i]); 
    } 

    std::cout << "The results from least amount eaten to the greatest amount"\ 
    " eaten are as follows:" << std::endl; 

    bubbleSort(pancakeAmount, 10); 

    for (int k = 0; k < 10; k++) { 
     std::cout << pancakeAmount[k] << std::endl; 
    } 

    return 0; 
} 
: 0 팬케이크

내가 쓴

현재 버전을 먹었다 : 4 팬케이크 ... 사람 5 먹었다

이것이 내가 현재 작업하고있는 문제입니다. 현재이 문제의 처음 두 가지 목표는 주목할만한 문제없이 해결되었습니다.

그러나 세 번째 목표는 조금 더 어려워졌습니다. 적절한 라벨을 사용하여 정렬 된 목록을 디자인/구현하는 데 어려움을 겪고 있습니다. 47 행에서 해당 금액을 줄 이름이나 라벨을 얻으려고합니다.

콘솔에 할당 할 금액을 받아들이지 만 getline() 함수 호출을 완전히 무시하고 다른 금액을 물어 보는 문제가 발생합니다. "std :: cin >> pancakeAmount [i]"가 호출되기 전에 getline() 함수가 호출되면 첫 번째 루프에서 입력을 줄 수 있지만 연속 루프는 getline() 함수가 발생했을 때 발생한 오류를 생성합니다. 코드에서 원래 위치입니다.

부적절한 방식으로 문자열 배열을 사용하려고합니까, 아니면 getline() 함수가 제대로 사용되지 않습니까?

+3

인가? –

+3

★★★★★ 귀하의 "진짜"질문에 새로운 라인을 추가하십시오. 대답을 기대한다면 주문을하지 말고 질문에 약간의 노력을 기울이십시오. – ereOn

+0

왜 다른 줄에 입력해야합니까? 당신의 의견대로 "name #"을 가질만큼 쉬울 것입니다. 대안 구현으로 각 "팬케이크 레코드"를 클래스 또는 구조체로 저장할 수 있습니다. 그런 다음 해당 유형의 배열을 만듭니다. 목록을 탐색 할 때 전체 레코드를 이동할 수 있습니다 (포인터를 움직이는 것이 더 효율적이지만 작은 크기의 세트로 전체 복사본을 얻을 수 있음). 정렬이 끝나면 전체 구현을 위해 목록을 이동하고 최단 횟수의 팬케이크를 기록합니다. – ccozad

답변

0

오늘은 숙제를하지 않기 때문에 오늘은 운이 좋은 날입니다.
귀하의 문제는 당신이 귀하의 cin의 반환을 무시해야한다는 것입니다.

그래서이 문제를 해결해야하지만, 테스트되지 않은 :이 숙제

struct PanCakeEater 
{ 
    int pancakeEaten; 
    std::string name; 
}; 
bool PanCakeSort(PanCakeEater const& eater1, PanCakeEater const& eater2) 
{ 
    return eater1.pancakeEaten < eater2.pancakeEaten; 
} 

int main() 
{ 
    std::vector<PanCakeEater> eaters; 
    const size_t numberOfEaters = 3; 
    for(size_t i = 0; i < numberOfEaters; ++i) 
    { 
     PanCakeEater p; 
     std::cout << "Please enter an amount of pancakes eaten by consumer number " << i << "." << std::endl; 
     std::cin >> p.pancakeEaten; 
     std::cin.ignore(); // ignore the \n 
     std::cout << "Please enter the name of the person who ate that amount of pancakes." << std::endl; 
     getline(std::cin, p.name); 
     eaters.push_back(p); 
    } 
    std::sort(eaters.begin(), eaters.end(), PanCakeSort); 
    for(auto iter = eaters.begin(); iter != eaters.end(); ++iter) 
    { 
     std::cout << iter->name << ": " << iter->pancakeEaten << std::endl; 
    } 
    return 0; 
} 
+0

-1 숙제임을 알면서도 해결책을 주려고합니다. – Jaywalker

+0

@ Jaywalker : 나는 해결책을 제시 한 곳을 보지 못했습니다.내 것은 더 똑똑하지만 기본적인 문제는 OP가 해결합니다. 그리고 cin에 대한 누락 된 무시는 아주 흔한 문제입니다. 나는 자주 보았습니다. – mkaes

+0

아마도 숙제가 아니라고 덧붙였습니다. 이것은 cplusplus.com 포럼에서 발견 된 운동이었습니다. 해당 사이트에서 자습서의 레이아웃과 함께 확장 할 수있는 연습 문제가있는 게시물이있었습니다. –

0
#include<iostream> 

    using namespace std; 

    int main() 

    { 

     int ate[10],eater[10],hold,temp; 

     cout<<"\t\tEnter How Many Pancakes Did Each Person Eat?\n\n"; 

     for(int h=0;h<10;h++) 

     { 

      eater[h]=h; 

     } 

     for(int q=0;q<10;q++) 

     { 

      cout<<"Person "<<eater[q]+1<<" Ate: "; 

      cin>>ate[q]; 

     } 

     cout<<"____________________________________________\n\n"<<"\t\tOrdered  List Of Above.\n\n"; 

     for(int a=0;a<10;a++) 

 { 

  for(int b=0;b<10;b++) 

  { 

   if(ate[b]<ate[b+1]) 

   { 

    hold=ate[b]; 

    ate[b]=ate[b+1]; 

    ate[b+1]=hold; 

    temp=eater[b]; 

    eater[b]=eater[b+1]; 

    eater[b+1]=temp; 

   } 

  } 

 } 

 for(int w=0;w<10;w++) 

 { 

  cout<<"Person "<<eater[w]+1<<" Ate "<<ate[w]<<" Pancakes\n"; 

 } 

 return 0; 

}