2016-08-11 4 views
-3

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

#include <iostream> 

using namespace std; 

int main() 
{ 
    const int size = 4; 
    int sum, i, j; 
    int SumMatrix[4][4]; 

    for (int i = 0; i < 4; i++) 
    { 
     cout << "Enter a by 4 matrix row by row: \n"; 
     cin >> i; 
     for (int j = 0; j < 4; j++) 
     { 
      cout << "\n"; 
      cin >> j; 

     } 
    } 
    sum += SumMatrix[i][j]; 
    cout << "Sum of the matrix is" << sum << endl; 

    return 0; 
} 

Когда я скомпилировал код, он показывает, что он не имеет ошибок. Но когда я его выполню, it gave me this error.

Пожалуйста, помогите. Я ноб, и я застрял. Я не знаю другой альтернативы для решения этой проблемы.

+0

Что вы ожидаете 'sum + = SumMatrix [i] [j];' делать? – NathanOliver

+0

1) Измените 'cin >> j;', не используйте ту же переменную, которая используется для цикла. 2) Поместите значение, которое вы читаете в 'SumMatrix'. 3) Переместите 'sum + = SumMatrix [i] [j];' внутри петель сразу после (2). Кстати, вы должны, вероятно, удалить этот 'cin >> i;' и переместить 'cout <<" Введите по 4 матрицы подряд за строкой: \ n ";' перед циклами. – DimChtz

+0

Еще одна вещь: «int sum» to 'int sum = 0;' – DimChtz

ответ

-1

Это утверждение во внутреннем цикле

cin >> j; 

не имеет смысла. Вы должны вводить элементы матрицы вместо изменения индекса.

Также это утверждение

sum += SumMatrix[i][j]; 

должен быть заключен в петлях.

И вы должны инициализировать изначально переменная sum 0.

и переменные i и j также не инициализируется

int sum, i, j; 
     ^^^^^ 

Таким образом это утверждение

sum += SumMatrix[i][j]; 

приводит к неопределенным поведение программы.

Вы должны удалить свою декларацию, потому что они должны быть объявлены и использованы в циклах.

Программа может выглядеть следующим образом

#include <iostream> 

int main() 
{ 
    const size_t N = 4; 
    int matrix[N][N] = {}; 

    std::cout << "Enter a " << N << " by " << N << " matrix row by row: \n"; 

    for (size_t i = 0; i < N; i++) 
    { 
     std::cout << "Enter row " << i << ": "; 
     for (size_t j = 0; j < N; j++) std::cin >> matrix[i][j]; 
    } 

    long long int sum = 0; 

    for (size_t i = 0; i < N; i++) 
    { 
     for (size_t j = 0; j < N; j++) sum += matrix[i][j]; 
    } 

    std::cout << "Sum of the matrix is " << sum << std::endl; 

    return 0; 
} 

Его выход может выглядеть

Enter a 4 by 4 matrix row by row: 
Enter row 0: 1 2 3 4 
Enter row 1: 5 6 7 8 
Enter row 2: 9 10 11 12 
Enter row 3: 13 14 15 16 
Sum of the matrix is 136 

Чтобы рассчитать сумму, которую вы могли бы использовать также стандартный алгоритм std::accumulate, что в свою очередь, использует std::accumulate для каждой строки.

+0

Почему 4 цикла? Просто вычислите 'sum' в первых 2 циклах. – DimChtz

+0

@DimChtz Я стараюсь не показывать плохой код. С четырьмя циклами логика программы прозрачна, и сама программа может быть разделена на функции или может использовать стандартные алгоритмы. –

0

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

Это потому, что ваша программа не имеет syntax errors, но встречается с runtime error(s).

Теперь сосредоточьтесь на внешнем контуре (for(i...)). Вы написали в заявлении

cin >> i; 

Примечание, i является управляющей переменной цикла. Поэтому, когда вы вводите первый элемент первой строки, он фактически попадает в i, и, таким образом, цикл полностью перепутался. (Возможно, вы получите ошибку array index out of bounds.) Так что вы должны сделать, это изменить всю структуру вложенного цикла в этом:

for(i = 0; i<4; i++){ 
    for(j=0; j<4; j++){ 
     cin >> SumMatrix[i][j]; 
     sum += SumMatrix[i][j]; //adding up the elements 
    } 
} 
/*the array now has all the elements 
    and sum stores the value of sum of all elements*/ 

В принципе, вы пытаетесь читать элементы в массив, но были незнакомы с правильным синтаксисом. i и j не относятся непосредственно к элементам в строке i и столбце j; правильный синтаксис для доступа к элементу массива в строке i и столбцу j равен SumMatrix[i][j].

Кроме того, обратите внимание, что заявление

sum += SumMatrix[i][j]; 

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

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