0

私がしなければならない質問は次のとおりです。

課題の生徒の成績のヒストグラムを出力するプログラムを作成します。プログラムは、各生徒の成績を整数として入力し、ベクトルに格納する必要があります。ユーザーがグレードに -1 を入力するまで、グレードを入力する必要があります。次に、プログラムはベクトルをスキャンしてヒストグラムを計算する必要があります。グレードの最小値は 0 ですが、プログラムはユーザーが入力した最大値を決定する必要があります。動的配列を使用してヒストグラムを保存します。ヒストグラムをコンソールに出力します。

例を追加: 入力 20 30 4 20 30 30 -1 出力 4 の数: 1 20 の数: 2 30 の数: 3

これまでにコーディングしたのは次のとおりです。

#include <iostream>
#include <vector>

using namespace std;

void histogram(vector<int> input);
int main()
{
    int i=0;
    int value;
    vector<int> grades;
    while(i>=0)
    {
        cout<<"Enter a grade for the student: ";
        cin>>value;
        grades.push_back(value);
        if((grades[i])==(-1))
        {
            break;
        }
        i++;
    }
    histogram(grades);


}

void histogram(vector<int> input)
{

}

ヒストグラム関数を試してみましたが、ひどい方法で失敗しました。このヒストグラムにアプローチする方法がわかりません。

4

1 に答える 1

0

これが正しいかどうかはわかりませんが、私はこれを行いました。

void histogram(vector<int> input)
{
    // declaration of a new array
    int aGrades[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};         


    for (std::vector<int>::iterator it = input.begin() ; it != input.end(); ++it)
    {
        int number = *it;
        //cout << number << endl;
        aGrades[number] += 1;
        //int *it; //works fine
    }

    for (int gradeLoop = 0; gradeLoop < 100; gradeLoop++)
    {
        if(aGrades[gradeLoop] > 0 )
        {
            cout << "Number of " << gradeLoop << "'s:   " << aGrades[gradeLoop] << endl;
        }
    }
}
于 2013-06-24T12:44:58.427 に答える