2016-05-31 2 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

Ваша программа имеет много проблем, с которой я хотел бы отметить некоторые:

  1. от того, как я понимаю ваш код, int size = sizeof(test_values); должно быть количество целых чисел в вашем массив test_values. Однако sizeof(x) возвращает размер x в байтах. В вашем случае size равно 4 * 14 = 56, так как int имеет четыре байта большой. Чтобы получить то, что вы хотите, вам нужно разделить на размер 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).