2011-12-15 1 views
0

私はユーザーが選択した量だけ入力できるプログラムを作成しようとしています。数字を昇順に表示し、平均値を表示したい。私はこの部分を終わらせましたが、少なくとも90以上の数字がある場合は文字列を、90以上の数字がない場合は文字列を印刷したいと思っています。私がコンパイラを使って実行するたびに、私が使用しなければならないブール関数は1つの引数を取らないと言います。私は本当に何をすべきか分からない。すべての数値が90より大きい場合に文字列を出力するブール関数

#include <iostream> 
using namespace std; 
#include <iomanip> 
#include <cstdlib> 

int compare(const void* pa, const void* pb) 
{ 
    const int& a = *static_cast<const int*>(pa); 
    const int& b = *static_cast<const int*>(pb); 
    if (a < b) return -1; // negative if a<b 
    if (a > b) return 1; // positive if a>b 
    return 0; // 0 for tie 
} // compare 

double getAverage(int* score, int n) 
{ 
    int sum = 0; 
    int i = 0; 
    for (i = 0; i < n; i++) 
    sum += score[i]; 
    double average = double(sum)/n; 
    return average; 
} // getAverage 
//Boolen Function to see if there are A grades present 
bool getAGrades(int* score, int n) 
{ 
    int i = 0; 
    for (i = 0; i < n; i++){ 
     if (score[i] >= 90){ 
      return true; 
      cout << "there is at least one A"<<endl; 
     }else { 
      return false; 
      cout<<" No A Grades "<<endl; 
     } 
    } 
} 
int main() 
{ 
    int size; 
    cout << "How many scores? "; 
    cin >> size; 
    cin.ignore(1000, 10); 
    int* score = new int[size]; 

    int i; // loop counter 
    for (i = 0; i < size; i++) 
    { 
     cout<< "Enter a number: "; 
     cin >> score[i]; 
     cin.ignore(1000, 10); 
    } // for 

    qsort(score, size, sizeof(int), compare); 
    for (int i = 0; i < size; i++) { 
     cout << score[i] << ' '; 
    } 
    cout <<endl; 
    cout << "Lowest score = " << score[0] << endl; 
    cout << "Highest score = " << score[size-1] << endl; 
    cout << fixed << setprecision(1); 
    cout << "Average = " << getAverage(score, size) << endl; 
    //this is where i want it to print if there are a grades or not 
    getAGrades(score); 

    return 0; 
} // main 
+0

? 'std :: sort'と' std :: vector'を使用してください。 – KoKuToru

+0

逐語コンパイラのエラーメッセージをコピーしてください。 – csl

答えて

1
bool getAGrades(int* score, int n) 

getAGradesには、スコアとnの2つの引数が必要です。

getAGrades(score); 

getAGradesを呼び出すと、1つの引数しか渡されません。 nの引数も渡す必要があります。

getAGrades(score, size); 

getAGrades関数本体にもエラーがあります。あなたが配列[1,100]を渡したとします。 forループの最初の反復では、score [0] == 1であるので、falseを返します。これは、それが90を上回っていることを確認するためにスコアを得ることは決してありません。このため、配列全体を反復するまで、falseを返すのを遅らせるべきです。

bool getAGrades(int* score, int n) 
{ 
    int i = 0; 
    for (i = 0; i < n; i++){ 
     if (score[i] >= 90){ 
      return true; 
      cout << "there is at least one A"<<endl; 
     } 
    } 
    return false; 
    cout<<" No A Grades "<<endl; 
} 

もう1つ - あなたのcoutステートメントは値を返した後に発生するので、決して実行されません。あなたはreturn文の前にそれらを置くべきです。

bool getAGrades(int* score, int n) 
{ 
    int i = 0; 
    for (i = 0; i < n; i++){ 
     if (score[i] >= 90){ 
      cout << "there is at least one A"<<endl; 
      return true; 
     } 
    } 
    cout<<" No A Grades "<<endl; 
    return false; 
} 
+0

それは感謝しました! – David

2

まず、あなたの質問:機能getAGradesint* scoreをとり、int nmainから戻る前に最後に行うことはgetAGrades(score);ですが、サイズを指定しないでください。あなたはまた、サイズ:getAGrades(score, size)を渡さなければなりません。

第2の理由:比較機能がvoid*の理由それは何の理由もありません。安全な比較機能を持つタイプセーフであるstd::sortを使用していないのはなぜですか?

第3:getAGradesは、それぞれcoutの直前に戻りますので、何も表示されません。 cout、次にが返されます。
編集:Kevenまた、getAGradesは、A以外のグレードを見つけたときに戻ることに気付きました。説明したように、Aグレードを見つけた場合、その関数は戻ってくるか、見つからないとグレードのALLどれか。ブロック"No A Grades"に、 forループの後に削除します。

第4回:あなたのcin.ignoreは、書式設定された入力しか持っていないので、何も役に立ちません。また、10の代わりに'\n'を使用してください。そうしないと、人々を混乱させてしまいます。

第5回:独自の配列を割り当てるための標準コンテナを推奨します。コードがscoreの配列をリークするためです。

+0

だから、 'getAGrades(score、size);' – David

1

std::sortおよびstd::vectorを使用してください。 私はそれが本当にこの問題の答えではないことを知っています。 しかし、C++を使用する場合は、qsortのようなC関数を使用しないでください。 std::sortでは、配列もソートできます。

qsort(score, size, sizeof(int), compare);は(固定getAGrades機能で、std::vectorstd::sortの使用)std::sort(score, score+size);(またはstd::sort(score, score+size, compare);

C++の方法になります:C++ことになって

#include <iostream> 
#include <iomanip> 
#include <vector> 
#include <algorithm> 

using namespace std; 

double getAverage(const vector<int>& score) 
{ 
    int sum = 0; 
    for(int i = 0; i < score.size(); ++i) 
    { 
     sum += score[i]; 
    } 
    return sum/double(score.size()); 
} 


bool getAGrades(const vector<int>& score) 
{ 
    for (int i = 0; i < score.size(); ++i) 
    { 
     if (score[i] >= 90) 
     { 
      cout << "there is at least one A"<<endl; 
      return true; 
     } 
    } 
    cout << "No A Grades"<<endl; 
    return false; 
} 

int main() 
{ 
    int size; 

    cout << "How many scores? "; 
    cin >> size; 
    cin.ignore(1000, 10); 

    vector<int> score(size); 

    for (int i = 0; i < size; i++) 
    { 
     cout<< "Enter a number: "; 
     cin >> score[i]; 
     cin.ignore(1000, 10); 
    } 

    sort(score.begin(), score.end()); 
    for (int i = 0; i < size; i++) 
    { 
     cout << score[i] << ' '; 
    } 
    cout <<endl; 
    cout << "Lowest score = " << score[0] << endl; 
    cout << "Highest score = " << score[size-1] << endl; 
    cout << fixed << setprecision(1); 
    cout << "Average = " << getAverage(score) << endl; 

    getAGrades(score); 

    return 0; 
} 
関連する問題