2016-03-26 14 views
0

seçim sıralama işlevi çağırmak için Yani soru yukarıdaki dereceli programına seçimi sıralama işlevini ekleyin etmektir. Program sıralı artan düzende notlarının listesini göstermesi gerekir, biz seçim sıralama işlevi veriyoruz ve bunu değiştirmek olamaz, benim sorum ben ana işlevi İştenasıl ana

onu çağırır nasıl benim code` olduğunu

#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' işlevini kullanmıyorsanız, fazladan bir şeyler yapmanıza gerek yoktur. '\ n \ 'bir satır biter. –

+0

Zaten işlevi çağırıyorsunuz. Sadece geçersiz olmayan sonuçlara bir geçersiz fonksiyon atamaya çalışıyorsunuz. Lütfen, varsa, hata mesajlarını daima ekleyin, şimdi hiç çağırmayacağınız gibi okur. –

+0

@PeteBecker Teşekkürler ama ben ekstra şeyler ihtiyacım var – user2969508

cevap

1

Ben senin sorunun "sort" fonksiyonu bir değer döndürmek için beklediklerini olduğunu düşünüyorum; o değil.

"sort" işlevi bir değer döndürmez, çünkü "void" bir dönüş değeri ile tanımlanmıştır, bu nedenle "sort" değişkeninden herhangi bir veri almaya çalışmak (ya da olmasın) çalışmayacaktır.

Diziler geçirilen içinde burada referans olarak işlevlerine; Bu, sıralama işlevindeki diziye yapılan tüm değişikliklerin, işlev döndükten sonra hala orada olduğu anlamına gelir; Bu nedenle, "notları" dizisi, varolmayan bir dönüş değeri çıkarmalısınız.

DÜZENLEME:

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

cout << endl; 

DÜZENLEME 2: yerine böyle bir şey çalışılıyor

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

: Ben senin sorunun hattında olduğuna inanıyoruz

sor = sort(grades, ngrades); 
: Ayrıca, hat değiştirmek sadece için

:

sort(grades, ngrades); 

DÜZENLEME 3: Bu "tür" fonksiyonu ile birkaç sorunlar var olduğu ortaya çıktı. İlk ve en kötü problem, "min_value" değişkeninin tanımlanmadan kullanılmakta olmasıdır.

Ben bu değişti sonra, program aday olacağını, ancak "sort" fonksiyonu düzgün çalışmadı. Bu, beni ikinci soruna getiriyor: "min" değeri ve "min_index" değişkenleri "i" nin her yinelemesi için sıfırlanmalıdır.

min_value = x[i]; 
min_index = j; 

:

son bir sorun, "j" döngü içinde, "MIN_VALUE" "x [i]", bu "x [j]" tahsis edilmelidir oysa atanır, yani olmalıdır:

min_value = x[j]; 
min_index = j; 

Bu işlevin çalıştığından emin olmak için işlevi onardım ve sınayın. İşte kod.

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

bu yüzden sıralama (notları) veya başka bir şey olmalıdır – user2969508

+0

Hayır, hayır. Fonksiyonu düzgün aradınız. Ben senin sorunun şu anda olduğunu düşünüyorum: cout << "Array sıralanmış" << sor << endl; Bunun yerine şöyle bir şey yapın: cout << "Array sıralanmış" (int i = 0; i Fearnbuster

+0

Cevabımın düzenlenmesine göz atın. – Fearnbuster