2013-04-05 86 views
0

我有点卡住了我的程序,该程序是读取一组结果,然后构造一个直方图,表明每个十年中有多少标记,即10-20等之间有多少等。直方图程序的帮助

我有2个问题

  1. 我如何编辑我的代码,只允许readExamResults存储在0 -100
  2. 范围内的那些我怎样才能获得PrintHisto打印*在某运输及工务局局长()取决于哪个十年中的每个结果在哪里,例如如果我输入了3,4,5,11,23,那么它应该在10年内显示3 *,在10 - 20年内显示1,在20 - 30年代显示1。

任何帮助将不胜感激。

代码:

using namespace std; 

void readExamMarks(int examMarks[], int sizeOfArray){ 

cout << "Please enter a set of exam marks to see a histogram for:" << endl; 
int x = 0; 
for(int idx = 0; idx < sizeOfArray; idx++){ 

    cin >> x; 
    examMarks[idx] = x; 
} 
} 

void printExamMarks(int examMarks[], int sizeOfArray){ 

for(int x = 0; x < sizeOfArray; x++){ 

    cout << setw(5) << examMarks[x]; 
} 
cout << endl; 
} 

void printHisto(int examMarks[], int sizeOfArray){ 
system("cls"); 

for(int x = 0; x < 6; x++){ 
cout << setw(5) << "*" << endl; 
} 
} 

int main() 
{ 
int examMarks[5]; 

readExamMarks(examMarks, 5); 
printHisto(examMarks, 5); 
printExamMarks(examMarks,5); 


system("PAUSE"); 
} 
+0

对于第二部分考虑看着['计数sort'](http://en.wikipedia.org/wiki/Counting_sort)。 – 2013-04-05 15:10:57

回答

0

如何编辑我的代码,只允许readExamResults到那些 存储在0 -100

的范围内我猜你的意思readExamMarks而不是readExamResults。如果是这样,您只需添加一个if语句来检查输入值是否在[0..100]范围内。我还将环路语句for更改为while,因为您只是在输入有效数字时增加idx

void readExamMarks(int examMarks[], int sizeOfArray) 
{ 
    cout << "Please enter a set of exam marks to see a histogram for:" << endl; 
    int x = 0; 
    int idx = 0; 
    while(idx < sizeOfarray) 
      cin >> x; 
      if((x >=0) && (x <= 100)){ 
       examMarks[idx] = x; 
       idx++; 
      } 
      else 
       cout << "ERROR: Value must be in range [0...100], please enter a valid value\n"; 
    } 
} 
0

基本上你创建一个新的数组,每个十年的条目。然后遍历考试等级和增加在直方图中,根据十年:

vector<int> calculateHistogram(vector<int> grades) 
{ 
    vector<int> histogram(10, 0); 
    for (int i=0; i<grades.size(); i++) { 
     int decade = grades[i]/10; 
     histogram[decade] += 1; 
    } 
    return histogram; 
}