2016-03-26 11 views
0

上記のグレードプログラムに選択ソート機能を追加するのが問題です。プログラムは、ソート昇順に成績の一覧を表示する必要があり、我々は選択ソート機能を与えているし、それを変更カント、私の質問は、私は主な機能ここでメインで選択ソート機能を呼び出す方法

からそれを呼び出す方法であることは私のcode`ある

#include <iostream> 
using namespace std; 

double average(double x[], int n); 
double maximum(double x[], int n); 
double minimum(double x[], int n); 
int nAboveAvg(double x[], int n); 
void sort(double x[], int npts); 


int main() 
{ 
    double grades[50]; 
    int ngrades; 

    cout<<"How many grades? (max = 50) "; 
    cin>>ngrades; 

    //create for loop to get grades from user 
    for(int i = 0; i<ngrades; i++) 
    { 
     cout<<"Enter grade "; 
     cin>> grades[i]; 
     while(grades[i]< 0 || grades[i] > 100) 
     { 
      cout<<"Invalid grade- please enter again"<<endl; 
      cin>>grades[i]; 
     } 
    } 

    //call the functions 
    double avg = average(grades, ngrades); 
    double max = maximum(grades, ngrades); 
    double min = minimum(grades, ngrades); 
    int nAbove = nAboveAvg(grades, ngrades); 

     //Calling the sort function 
    sor = sort(grades, ngrades); 
    //display results 



    cout << "Average = " << avg << endl; 
    cout << "# above average = " << nAbove << endl; 
    cout<<"Max value is = "<<max<<endl; 
    cout<<"Min value is = "<<min<<endl; 
    cout<<"Array sorted "<<sor<<endl; 

} 

void sort(double x[], int npts) 
{ 
    double min_value; 
    int min_index; 
    double temp; 
    for(int i= 0; i<npts - 1; i++) 
    { 
     for(int j = i + 1; j<npts; j++) 
     { 
      if(x[j] < min_value) 
      { 
       min_value = x[i]; 
       min_index = j; 
      } 
     } 

     temp = x[min_index]; 
     x[min_index] = x[i]; 
     x[i] = temp; 
    } 
    return; 
} 

`

+0

余分なものが必要な場合以外は、 'std :: endl'を使用しないでください。 '' \ n ''は行を終わらせます。 –

+0

あなたは既に関数を呼び出しています。 void関数に存在しない結果を代入しようとしています。何かがある場合は、常にエラーメッセージを含めてください。 –

+0

@PeteBeckerありがとうございます。私は余分なものが必要だと思います。 – user2969508

答えて

1

あなたの問題は、「ソート」関数が値を返すと期待していると思います。それはしません。

"sort"関数は "void"戻り値で定義されているため、変数 "sort"からデータを取得しようとすると値が返されません(とにかくしないでください)。

配列は参照によって関数に渡されます。つまり、ソート関数内で配列に加えられたすべての変更は、関数が返ってもまだそこに残っています。このため、存在しない戻り値ではなく、「等級」配列を出力する必要があります。

EDITは:

for (int i = 0; i < ngrades; ++i) 
{ 
    cout << grades[i] << " "; 
} 

cout << endl; 

EDIT 2:代わりにこのような何かをしようと

cout<<"Array sorted "<<sor<<endl; 

:私はあなたの問題はラインであると信じてい

sor = sort(grades, ngrades); 
:また、行を変更します

to:

sort(grades, ngrades); 

編集3:「並べ替え」機能にはいくつかの問題があることが判明しました。最初の、そして最悪の問題は、変数 "min_value"が定義されずに使用されていることです。

これを変更すると、プログラムは実行されますが、「並べ替え」機能が正しく機能しませんでした。 これは私に第2の問題をもたらします。変数 "min_value"と "min_index"は "i"の繰り返しごとにリセットする必要があります。

最後の問題は、それが "X [J]" に割り当てられるべきであるのに対し、 "J" ループ内で、 "MIN_VALUE" は、 "X [i]が" に割り当てられている、ということである。

min_value = x[i]; 
min_index = j; 

min_value = x[j]; 
min_index = j; 

私はこの関数を修正し、それが動作することを確認するためにテストしました。 ここにコードがあります。

void sort(double x[], int npts) 
{ 
    double min_value; 
    int min_index; 
    double temp; 

    for (int i = 0; i < npts - 1; i++) 
    { 
     min_value = x[i]; 
     min_index = i; 

     for (int j = i + 1; j < npts; j++) 
     { 
      if (x[j] < min_value) 
      { 
       min_value = x[j]; 
       min_index = j; 
      } 
     } 

     temp = x[min_index]; 
     x[min_index] = x[i]; 
     x[i] = temp; 
    } 

    return; 
} 
+0

なので、ソート(等級)しなければなりません。 – user2969508

+0

いいえ、いいえ。あなたは関数を適切に呼び出しました。私はあなたの問題が次の行にあると信じています:cout << "配列ソート" << sor << endl;代わりに、次のようなことをします:cout << "配列ソート" for(int i = 0; i Fearnbuster

+0

私の答えの編集をチェックしてください。 – Fearnbuster

関連する問題