2015-02-17 7 views
0

Цель этой задачи - найти среднее значение массива, но не внутри основного, мне нужно вызвать функцию для выполнения суммы и показать среднее значение.Использование функции для поиска среднего значения массива C++

я, хотя мой код был звук, но он просто возвращает «в среднем составляет 011014F1»

Я попробовал несколько различных способов сделать функцию, но я пошел неправильно где-то, может быть везде!

Просто голова, им только начинается с программирования.

Heres мой код:

#include <iostream> 
#include <vector> 

using namespace std; 


void printArray(int theArray[], int sizeOfarray); 
float average(float numbers[], float size, float arrayAverage); 

int main() 
{ 

    int array[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 

    printArray(array, 10); 

    cout << "The average is: " << average << endl; 

    return 0; 
} 

void printArray(int theArray[], int sizeOfarray) 
{ 
    for (int x = 0; x < sizeOfarray; x++) 
    { 
    cout << theArray[x] << endl; 

    } 
} 

float average(float numbers[], float size, float arrayAverage) 
{ 
     double sum = 0.0; 
     for (int x = 0; x < size; x++) 
    { 
     sum += numbers[x]; 
     arrayAverage = sum/size; 
    } 
     return (arrayAverage); 
} 

У меня была средняя функция поплавок первоначально установлен как поплавок с междунар для «чисел», «размер» и «arrayAverage», но думал, что я изменил бы их все, чтобы плавать так они не сталкиваются. например, преобразование int в float и т. д.

Как я уже сказал, это новое, поэтому моя логика на самом деле не существует, но я думаю, что на правильных дорожках.

Любая идея, почему его возвращение 011014F1 и цифры, подобные этому, а не только в среднем 1-10?

Любые советы очень ценятся!

+0

То, что вы печатаете, является адресом функции «средний». Вы должны вызвать его с параметрами, чтобы он работал (как еще он узнает, какой массив он должен использовать?) – lared

+0

Существует опечатка. В 'cout' вы хотите' average (array, 10) 'else, как вы обнаружили, он печатает указатель на функцию. – Chintan

+0

попробуйте std :: valarray? – user3528438

ответ

1

Здесь есть ряд проблем. Во-первых:

cout << "The average is: " << average << endl; 

Это просто распечатав адрес функции average, не называя его. Что вы хотели бы сделать:

cout << "The average is: " << average(array, 10, 0) << endl; 

Во-вторых, ваша подпись метода имеет все виды промахов типа. Ожидаемый тип значения массива равен float, но вы передаете ему массив int. Это не сработает, поскольку компилятор не разрешит неявное преобразование от int[] до float[]. Ваш аргумент size должен быть int в сигнатуре метода, а не float, так как размеры массива всегда целые.

В-третьих, параметр arrayAverage, похоже, не имеет никакой цели, кроме как, возможно, сбросить вашу математику. Вы используете его как текущий накопитель, и это нормально, но нет причин передавать его функции, это может быть только локальное значение. Таким образом, ваш метод подпись должна выглядеть следующим образом:

float average(float numbers[], int size); 

Наконец, ваша математика для calulating среднего массива неправильно. Вы делаете:

for (int x = 0; x < size; x++) 
{ 
    sum += numbers[x]; 
    arrayAverage = sum/size; 
} 

В частности, arrayAverage = sum/size неправильно. Вернее, верно только во время последней итерации цикла. Это означает, что это просто потраченная впустую математика.Оно должно быть:

float average(float numbers[], int size) { 
    double sum = 0; 
    for (int x = 0; x < size; x++) 
    { 
     sum += numbers[x]; 
    } 
    return sum /(double)size; 
} 
+0

благодарит за ответы! – molebox

+0

просто попал в игру по ошибке, так или иначе, я действительно сделал математику таким образом в другом, но все было не так, и я не работал, поэтому я изменил его ... к худшему, казалось бы. как я сади выше моей логики и понимания не совсем там, чтобы быть honst, и именно поэтому я изменил int на float и т. д. ... но я изменил их обратно. хотя на «среднее значение:» << среднее (массив, 10,0) << endl; слово «массив» выделяется красным цветом, и программа не запускается ... – molebox

+0

говорит, что int несовместимо с float ..... что из-за «чисел» является float? – molebox

4

average - это функция, которая вам нужна позвонить и распечатать, что она возвращает. Теперь вы печатаете адрес этой функции.

+0

Кроме того, как написано, параметр 'arrayAverage' наиболее определенно * не * собирается делать то, что OP намеревается сделать для него. Фактически, их математика для вычисления среднего также неверна. – aruisdante

+0

На самом деле, не следует печатать '1', потому что указатель функции преобразуется в bool? Это фактически то, что происходит с VC 2013, включая предупреждение об конверсии ('warning C4305: 'argument': truncation from 'float (*) (float [], float, float)' to 'std :: _ Bool''). Между прочим, у меня такое же поведение на ideone.com. Вопрос в том, почему OP получает явный адрес, напечатанный здесь? –

+0

@ChristianHackl возможно, что это специфичный для компилятора (или специфичный для платформы). Я, конечно, не ожидал, что указатель функции будет неявным образом отбрасываться в bool в потоке. – aruisdante

-1
#include <iostream> 
#include <vector> 

using namespace std; 

void printArray(int theArray[], int sizeOfarray); 

int main() 
{ 
    int array[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
    printArray(array, 10); 
    return 0; 
} 

void printArray(int theArray[], int sizeOfarray) 
{ 
    for (int x = 0; x < len(theArray); x++) 
    { 
    average = average + theArray[x] 
    } 
    average = average/(len(theArray)); 
    cout << average; 
} 
+0

Что такое 'len (theArray)'? Если вы еще не закодированы на C++ долго, не слепо отправляйте неправильные коды – P0W

+0

Я помогаю gggg – LampPost

+0

Нет, вы этого не делаете, вы не компилируете код, а вы вводите в заблуждение OP, а другие говорят, что есть что-то вроде len 'function, в которой нет такой функции. Я предлагаю вам удалить это сообщение или переписать фиксированный код. – P0W

-1

1: в функции «всплывают среднее (число с плавающей точкой [], размер поплавка, поплавок arrayAverage)» вам не нужно давать arrayAverage как периметр, следует инициализировать в function scope, 2: если вы новичок, ну, вы узнаете о указателях позже, в которых вы узнаете, что функция на самом деле адресована! 3: с помощью этой линии (соиЬ < < «Среднее значение:» < < среднего (массив, 10) < < ENDL;), помните, инициализировать поплавок arrayAverage в области видимости функции

+1

Добро пожаловать в Stackoverflow! Пожалуйста, отформатируйте инструмент, чтобы получить лучший ответ и репутацию. – P0W

+0

Извините, что такое инструмент форматирования? что я должен отформатировать? код? – molebox

0

Вы не передавая любую вещь к вашей функции (float numbers), float size, float arrayAverage). Вы должны передать свой массив как первый параметр и размер массива во втором, третий, который вам не нужен, я рекомендую вам удалить его. Ваша функция будет be:

float average(float numbers[], float size) 
{ 
float average; 
     double sum = 0.0; 
     for (int x = 0; x < size; x++) 
    { 
     sum += numbers[x]; 
     arrayAverage = sum/size; 
    } 
     return (average); 
} 

и в вашем распоряжении вы выполняете поплавок averageResult = average (ar луч, размер); qDebug() "averageResult;

+0

Это пустая трата времени, когда в цикле есть 'arrayAverage = sum/size;', вы можете переместить это до конца как раз за пределы цикла. – leetNightshade

Смежные вопросы