2016-05-31 7 views
-4

私のコードで助けが必要です...何が間違っているのか、どうやって修正するのか分かりません。私はそれが私の変数と参照を宣言して何かを持っていると思うが、私はバグを修正する方法を完全にはわかっていない。助けてください!C++の平均と分散を計算する

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

double calculate_average(int test_values[], int& size, int& sum, double& average) { 
    int i; 
    for (i = 0; i < size; i++) { 
     sum += test_values[i]; 
    }; 
    return average = sum/i; 
    }; 

double var(int test_values[], int size, double average, double& variance) { 

    for (int j = 0; j < size; j++) { 
     variance += pow((test_values[j] - average), 2); 
    }; 
    return variance; 
}; 

int main() { 

    int test_values[] = { 89, 95, 72, 83, 99, 54, 86, 75, 92, 73, 79, 75, 82, 53 }; 
    int size = sizeof(test_values); 
    int sum; 
    double average, variance; 

    int calculate_average(int test_values[], int size, int sum, double average); 
    int var(int test_values[], int size, double average, double variance); 

    cout << fixed << showpoint << setprecision(2); 

    cout << test_values << endl; 
    cout << average << endl; 
    cout << variance << endl; 

    return 0; 
} 
+1

私が与えることができる最も良いアドバイスは、デバッガで行ごとにコードを検査し、変数値が実際にどのように変化しているかを監視することです。 –

+2

「何が間違っているのかわからない」というのは、役に立つ問題の説明ではありません。少なくとも、あなたはそれが間違っていると信じている理由を説明することができます。 –

+0

は出力を期待していますか?実際の出力? – ggrr

答えて

2

あなたのプログラムは、私はいくつかの点を指摘したいと思い、そこから多くの問題があります:int size = sizeof(test_values);があなたの整数の数であることを想定している、私はあなたのコードを理解する方法から

  1. をtest_values配列。ただし、sizeof(x)はxのサイズをバイト数で返します。あなたのケースでは、sizeは4 * 14 = 56に等しくなります。これはintが4バイト大きいためです。あなたが望むものを得るためには、intのサイズで除算する必要があります:int size = sizeof(test_values)/sizeof(int);。これにより、sizeが14に設定されます。

  2. 関数calculate_average()var()の場合には、重大な引数があります。必要なのはデータとサイズのみです。

  3. 分散をサイズで忘れてしまった。

  4. 関数を呼び出す構文は、double average = calculate_average(test_values, size);var()と同様)である必要があります。引数として渡す変数の名前を記述するだけで、型は自動的に決定されます。ここで

あなたに似た実施例である:それはそこに正しく機能の使用方法についての混乱のビットがあるので、私は強くそれについてのチュートリアルを介して動作することをお勧めします思えるとして

#include <iostream> 

    double average (int values[], int size) { 
     double sum = 0; 

     for (int i = 0; i < size; i++) { 
      sum += values[i]; 
     } 

     return sum/size; 
    } 

    double variance (int values[], int size) { 
     double avg = average(values, size); 
     double var = 0; 

     for (int i = 0; i < size; i++) { 
      var += (values[i] - avg) * (values[i] - avg); 
     } 

     return var/size; 
    } 

    int main(int argc, char **argv) { 
     int test_values[] = { 89, 95, 72, 83, 99, 54, 86, 75, 92, 73, 79, 75, 82, 53 }; 
     int size = sizeof(test_values)/sizeof(*test_values); 

     std::cout << "Average:\t" << average(test_values, size) << std::endl; 
     std::cout << "Variance:\t" << variance(test_values, size) << std::endl; 

     return 0; 
    } 

トピック(例:this one)。