2016-12-23 12 views
0

Мне нужно найти среднее значение для каждой строки ниже диагонали центрального массива.C++ array row average

Выделенные цифры являются те, которые мне нужно рассчитывать. Сумма первой строки ниже фиолетовой центральной диагонали равна 4, сумма второй строки равна 15 и так далее.

Я застрял в поиске среднего значения сумм для каждой строки. Вот код:

#include <iostream> 
using namespace std; 

int main() { 
    double A[100][100]; 
    double B[100]; 
    double n,m,sk; 
    double vid=0; 

    cin >> n >> m; 
    for(int i=0; i<n; i++) { 
     for(int j=0; j<m; j++) { 
      cin >> A[i][j]; 
     } 
    } 

    for(int i=0; i<n; i++) { 
     for(int j=0; j<m; j++) { 
      if(j<i && A[i][j]>0) { 
       cout << i << "-" <<A[i][j]<< endl; 
      } 
     } 
    } 
} 
+2

Позволяет некоторое время пропустить диагональную часть, знаете ли вы, как рассчитать среднее значение целой строки? Начните с этого. –

+1

Совет. Вы можете бесплатно использовать такие инструменты, как AStyle, для форматирования кода. Это то, что я использовал сейчас. Пожалуйста, всегда отформатируйте свой код перед его отправкой (если вы сохраните его всегда отформатированным, вы обнаружите, что это сэкономит вам работу). –

+0

Я как бы застрял в подсчете среднего числа строк. Не совсем уверен, как разбить строки из всего массива. –

ответ

0

Вот решение, которое вычисляет среднее значение каждой строки с помощью std::accumulate

#include <numeric> 
//... 
B[0] = 0.0; 
for (int i = 1; i < n; ++i) 
    B[i] = std::accumulate(A[i], A[i] + i, 0.0)/i; 

В основном мы установили первый в среднем на 0,0, так как первая строка не имеет значений, чтобы принять среднее значение.

Затем цикл проходит через строки 1 до n, где мы накапливаем значения, начиная с столбца 0, вплоть до столбца i-1. Затем мы берем эту сумму и делим на i. Поэтому в основном мы имеем это для матрицы в 4 строки:

B[0] = 0; 

Теперь цикл:

B[1] = (A[1][0])/1; 
B[2] = (A[2][0] + A[2][1])/2 
B[3] = (A[3][0] + A[3][1] + A[3][2])/3; 

Так контролирует i индекса, какой элемент в B массиве, чтобы установить, какую строку в A мы имеем в виду to и сколько элементов в этой строке добавить, плюс то, что нужно разделить, как только все элементы будут суммированы. Сумма std::accumulate составляет сумму для нас, указав начальный и конечный диапазон в строке для добавления, и все, что нам нужно сделать, - деление на i.

0

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

double tempsum = 0; 
int count = 0; 
for(int i=1; i<n; i++) { 
    tempsum = 0; 
    count = 0; 
    for(int j=0; j<i; j++) { 
     tempsum += A[i][j]; 
     count++;    
     } 
    B[i] = tempsum/count; 
    } 
}