2016-04-23 3 views
0

Я отделил средний метод от основного, два ученика в основном вызвали метод, но я не совсем уверен, как рассчитать среднее значение, делая это таким образом, любые идеи?Вычисление средних значений в другом методе C++

Среднее значение имеет две вещи. Он вычисляет среднее значение баллов ученика, помещает целочисленное среднее значение в конечный элемент, тем самым заменяя отрицательное число, которое затем возвращает количество фактических результатов тестов, найденных в массиве. Часовым в массиве является отрицательное число.

вот мой код

#include <iostream> 
using namespace std; 

double average(int array[]); // function declaration (prototype) 

int main() 
{ 
    int lazlo[] = {90, 80, 85, 75, 65, -10}; 
    int pietra[] = { 100, 89, 83, 96, 98, 72, 78, -1}; 
    int num; 

    num = average(lazlo); 
    cout << "lazlo took " << num << "tests. Average: " << lazlo[ num ] << endl; 

    num = average(pietra); 
    cout << "pietra took " << num << "test. Average: " << pietra[ num ] << endl; 

} 

double average(int array[]) 
{ 
    // Average code 

} 
+2

Вашей 'average' функция не имеет ни малейшего представления, сколько элементов есть в массиве. Помогает ли вам понять, чего не хватает? – PaulMcKenzie

ответ

0

Теперь, когда мы, наконец, знать истинное назначение:.

«Среднее делает две вещи он вычисляет среднее значение баллов студента, помещает среднее число в конечный элемент, заменяя тем самым отрицательное число, затем возвращает количество фактических результатов тестов, найденных в массиве. Дозорный сигнал в массиве является отрицательным числом «

double average(int array[]) 
{ 
    int i = 0; 
    int Total = 0; 
    while (array[i] >= 0)  //Keep adding to total and increase i until negative value found. 
     Total += array[i++]; 

    array[i] = Total/i; 
    return i;     //Weird to return a double for this, but if that is the assignment... 
} 
0

Если вы действительно хотите передать массив C-стиль в качестве единственного аргумента функции average(), вы должны использовать шаблоны вывести его размер:

#include <numeric> 
#include <iostream> 

using namespace std; 

template <size_t N> 
size_t count(int (&array)[N]) 
{ 
    return N; 
} 

template <size_t N> 
double average(int (&array)[N]) 
{ 
    return std::accumulate(array, array + N, 0.0)/N; 
} 

int main() 
{ 
    int lazlo[] = {90, 80, 85, 75, 65, -10}; 

    double num = average(lazlo); 
    cout << "lazlo took " << count(lazlo) << " tests. Average: " << average(lazlo) << endl; 
} 

Конечно, так как это C++, вы может быть лучше использовать std::vector или std::array для хранения очков, в этом случае вы можете сделать это:

double average(const std::vector<int>& array) 
{ 
    return std::accumulate(array.begin(), array.end(), 0.0)/array.size(); 
} 
+0

К сожалению, я могу редактировать средний метод и прототип, а не всю программу @JohnZwinck – HoodCoolege

+0

@HoodCoolege: Нет проблем - вы можете подключить мою первую версию «average» к вашей существующей программе. Это называется точно так же. –