2017-07-07 7 views
2

私はコーディングに慣れていないので、配列のMax、Min、Avg、および新しい正規化された値を表示する方法を知っておく必要があります。私はmax minとavgが今のところ正しく動作していますが、配列の適切な新しい値をどのように表示するのかについては非常に混乱しています。ポイントは、関数を使用することです。 XI '=(XI-分)/(最大 - 最小) 私の現在のコードは次のようである:配列とパス参照

#include <iostream> 
using namespace std; 

void normalizeMinMaxAvg(double data[], int size,double& min, double& max, double& avg) 
{ 
    max = 0; 
    min = 0; 
    int sum = 0; 
    int i; 
    avg = 0; 

    for (i = 0; i < size; i++) { 
     sum += data[i]; 
     if (max < data[i]) { 
      max = data[i]; 
     } 
     if (min > data[i]) { 
      min = data[i]; 
     } 
    } 
    avg = sum/size; 

    for (i = 0; i < size; i++){ 
     data[i] = (data[i]-min)/(max-min); 
    } 
} 


int main() 
{ 
    double data[] = {-10.0,0.0,20.0,30.0,500.0}; 
    double min, max, avg; 

    normalizeMinMaxAvg (data, 5, min, max, avg); 
    cout << "min = " << min << "\n"; 
    cout << "max = " << max << "\n"; 
    cout << "avg = " << avg << "\n"; 
    cout << data; 
    return 0; 
} 
+2

生の配列ではなく、代わりに 'std :: array'または' std :: vector'を使用してください。 – user0042

+0

これはまだ許可されていない学校仕事です。 –

+0

@MichaelDorganは正解ですが、それらはまだ使用されていません。 –

答えて

2

あなたのコードが正しく配列値を更新しています。

int arrSize = sizeof(data)/sizeof(data[0]); 
for(int i =0; i<arrSize; ++i) 
    cout << data[i]<<" "; 

また、あなたは、このような生の配列の代わりにベクトルを使用することができます:

vector<double> data ={-10.0,0.0,20.0,30.0,500.0}; 

をそして、あなたの関数にby referenceを渡ししかし、配列の値を表示するには、適切にこのようなfor loopを使用しています。

+1

単純に 'for(auto val:data)'にならないのはなぜですか? – user0042

+1

完全に同意しますが、質問はC++でタグ付けされていません。C++ 11 –

+0

C++ 11は***現在の***標準です。だからなぜ区別? – user0042

1

あなたの配列を「印刷」したい場合は、各メンバーを反復処理する必要がありますが、すでに何回か行ったように:

for (int i = 0; i < array_size; i++){ 
    cout << data[i] << "\n"; 
} 

あなたが現在何をしている:

cout << data; 

はウィル単純に配列のアドレスを出力してください。

+0

単純に 'for(auto val:data)'にならないのはなぜですか? – user0042

+0

@ user0042これはC++のバージョンによって異なります。いずれも問題ありません。 –

0

dataは、配列のアドレスしか保持していません。あなたの場合はdoubleへのポインタです。配列を繰り返し処理し、各値を個別に出力する必要があります。