2009-07-10 8 views
1

このプログラムでは、最小、最大、平均、中央値を計算する複数の値を返すのに問題があります。私がやった最初のことは参照引数を渡すことでしたが、それはうまくいきました - しかし、構造体やクラスの作成は複数の値を返すのが望ましい方法です。複数の値を返そうとしています

私は試しましたが、私は良い結果を得ることができませんでした。ここまで私はこれまで何を得ているのですか?

#include "std_lib_facilities.h" 
struct maxv{ 
     int min_value; 
     int max_value; 
     double mean; 
     int median; 
}; 

maxv calculate(vector<int>& max) 
{ 

    sort(max.begin(), max.end()); 

    min_value = max[0]; 

    int m = 0; 
    m = (max.size()-1); 
    max_value = max[m]; 

    for(int i = 0; i < max.size(); ++i) mean += max[i]; 
    mean = (mean/(max.size())); 

    int med = 0; 
    if((max.size())%2 == 0) median = 0; 
    else 
    { 
     med = (max.size())/2; 
     median = max[med]; 
     } 

} 

int main() 
{ 
    vector<int>numbers; 
    cout << "Input numbers. Press enter, 0, enter to finish.\n"; 
    int number; 
    while(number != 0){ 
       cin >> number; 
       numbers.push_back(number);} 
    vector<int>::iterator i = (numbers.end()-1); 
    numbers.erase(i); 
    maxv result = calculate(numbers); 
    cout << "MIN: " << result.min_value << endl; 
    cout << "MAX: " << result.max_value << endl; 
    cout << "MEAN: " << result.mean << endl; 
    cout << "MEDIAN: " << result.median << endl; 
    keep_window_open(); 
} 

もちろん、calculate関数の変数は宣言されていません。私は正しい方法でこれを実装して正しい値を返す方法を単に分かりません。これまで私が試したことから、私は非常に解釈された価値を得てきました。どんな助けもありがとう - ありがとう。

P.S.私はこのトピックに関する他のスレッドを見てきましたが、実際にはcalculate()に渡す必要のある引数とmaxv構造体の変数の間に実際には違いがないので、私はまだ混乱しています。

+0

なぜ完全な機能を表示していませんか?平均値をゼロに初期化しないため、中央値が誤って計算される可能性があります。 – Dingo

+0

「これまでに得たものはここにあります」と言ってもいいですね。 – ChrisW

答えて

8

3つの方法があります。

1)を算出関数からMAXVインスタンスを返し

maxv calculate(vector<int>& max) 
{ 
    maxv rc; //return code 
    ... some calculations ... 
    ... initialize the instance which we are about to return ... 
    rc.min_value = something; 
    rc.max_value = something else; 
    ... return it ... 
    return rc; 
} 

2)パススルーにMAXVインスタンス参照

void calculate(vector<int>& max, maxv& rc) 
{ 
    ... some calculations ... 
    ... initialize the instance which we were passed as a parameter ... 
    rc.min_value = something; 
    rc.max_value = something else; 
} 

3)その計算はMAXV構造体の方法であると言うことにより(またはさらに良いコンストラクタ)

struct maxv 
{ 
    int min_value; 
    int max_value; 
    double mean; 
    int median; 

    //constructor 
    maxv(vector<int>& max) 
    { 
     ... some calculations ... 
     ... initialize self (this instance) ... 
     this->min_value = something; 
     this->max_value = something else; 
    } 
}; 
+0

3つ目のオプションは、値を参照渡しすることができますが、動的メモリ割り当ての問題を回避できるため、特に優れています。オブジェクト指向でクリーンでもあります。いい考え。 –

+0

ありがとう、これは完璧だった。 – Alex

関連する問題