0

私はC++プログラミングにかなり慣れていないので、テキストファイルの数値を昇順で並べ替えて中央値を取得できるようにするためのコーディングの支援が必要ですが、その方法がわかりません。

これまでの私のコードは次のとおりです。

//Create a Vector to hold a set of exam scores.Write a program to do the following tasks: 1. Read exam scores into a vector from Scores.txt 
//2. Display scores in rows of five(5) scores.
//3. Calculate average score and display.
//4. Find the median score and display.
//5. Compute the Standard Deviation and display

#include <vector>
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

int main ()
{   const int array_size = 36; // array size
    int numbers[array_size]; //array with 36 elements
    int count = 0;
    int column_count = 5;
    ifstream inputfile; //input file into stream object
    //open file
    inputfile.open("Scores.txt");
    //read file
    while (count < array_size && inputfile >> numbers[count])
        count++;
    //close file
    inputfile.close(); 
    //display numbers read
    for (count = 0; count < array_size; count++) {
    cout << numbers[count] << " ";
    if ( count % column_count == column_count - 1 ) {
         cout << "\n";
    }
}

    //find the average
        double average; //average
        double total = 0; //initialize accumulator
        cout << "\nAverage:\n";
        for (count = 0; count < array_size; count++)
            total += numbers[count];
        average = total/array_size;
        cout << average << " ";
        cout << endl;

    //find the median
        std::sort(numbers.begin(), numbers.end(), std::greater<int>());





        system ("pause");

        return 0;
}

前もって感謝します!

4

3 に答える 3

1
#include <algorithm>

// ...
std::sort( numbers, numbers + array_size );
于 2012-11-13T04:14:19.427 に答える
1

あなたはおそらく、それが実際に何を意味するのかを理解せずに、どこかからこの行をコピーしたでしょう:

std::sort(numbers.begin(), numbers.end(), std::greater<int>());

通常の配列を使用しているため、最初の引数は配列の最初の位置へのポインターです。2番目の引数は、配列の最後の要素を過ぎたものへのポインターです。3番目の引数は、配列を並べ替える方向を示します(この場合、中央値を見つけたいので、方向は関係ありません)。長さが。のnumbersという配列のarray_size場合、新しい関数呼び出しは次のように書き直されます。

std::sort(&(numbers[0]), &(numbers[array_size]), std::greater<int>());

配列を関数に渡すとき、それらはそれ自体でポインターに減衰します。したがって、&演算子を使用する必要はありません。関数呼び出しは次のように簡略化できます。

std::sort(numbers, numbers + array_size, std::greater<int>());

この状況でデータを並べ替える目的は、中央値を見つけることです。配列の昇順または降順の並べ替えに関係なく、中央の要素の平均は同じになります。昇順で並べ替える必要がある配列をさらに使用する場合は、3番目の引数をに変更しますstd::less<int>()(または完全に削除します)。これにより、配列が昇順で並べ替えられます。

std::sort(numbers, numbers + array_size);
于 2012-11-13T04:20:57.883 に答える
0

std :: sort(...)関数については、http://www.cplusplus.com/reference/algorithm/sort/を参照してください。あなたの質問のために、あなたはビルトインタイプを扱っています。「Compare」パラメータをとらない最初のオーバーロードされたバージョンのstd::sortで十分です。そう思わない場合は、「より大きい」ではなく「小さい」を指定する必要があります

于 2012-11-13T04:17:35.877 に答える