2016-08-11 1 views
-3

Ich versuche, eine 4 x 4-Matrix zu codieren und die gesamte Matrix zu summieren. Hier ist der Code, den ich in C++ gemacht habe.Berechnen Sie eine 4 mal 4 Matrix und zeigen Sie die Summe aller Elemente an?

#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; 
} 

Wenn ich den Code kompiliert, zeigt es, dass es keine Fehler hat. Aber wenn ich es ausführe, it gave me this error.

Bitte helfen. Ich bin ein Noob und ich stecke fest. Ich kenne keine andere Alternative, um das zu lösen.

+0

Was erwarten Sie 'sum + = SumMatrix [i] [j];' zu tun? – NathanOliver

+0

1) Ändern Sie 'cin >> j;', verwenden Sie nicht die gleiche Variable wie für for loop. 2) Setze den Wert, den du gelesen hast, in 'SumMatrix'. 3) Bewegen Sie 'sum + = SumMatrix [i] [j];' innerhalb der Loops direkt nach dem (2). Übrigens sollten Sie dieses 'cin >> i;' entfernen und 'cout <<" verschieben. Geben Sie eine Zeile für Zeile für Zeile: \ n ";' vor den Schleifen ein. – DimChtz

+0

Noch eine Sache Änderung 'int sum' zu' int sum = 0; ' – DimChtz

Antwort

-1

Diese Aussage in der inneren Schleife nicht

cin >> j; 

keinen Sinn. Sie müssen Elemente der Matrix eingeben, anstatt den Index zu ändern.

Auch diese Aussage

sum += SumMatrix[i][j]; 

müssen in Schleifen eingeschlossen werden.

Und Sie haben zunächst die Variable sum auf 0

und die Variablen i und j auch nicht

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

So

sum += SumMatrix[i][j]; 

Ergebnisse in undefined initialisiert wurden initialisiert diese Aussage Verhalten des Programms.

Sie sollten ihre Deklaration entfernen, da sie in Schleifen deklariert und verwendet werden sollen.

Das Programm kann sehen die folgende Art und Weise

#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; 
} 

Sein Ausgang aussehen könnte

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 

die Summe berechnen Sie auch Standard-Algorithmus std::accumulate verwenden könnte, die wiederum verwendet std::accumulate für jede Zeile.

+0

Warum 4 Schleifen? Berechne einfach die Summe in den ersten beiden Loops. – DimChtz

+0

@DimChtz Ich versuche, keinen schlechten Code zu zeigen. Mit vier Schleifen ist die Logik des Programms transparent und das Programm selbst kann in Funktionen aufgeteilt werden oder Standardalgorithmen verwenden. –

0

Wenn ich den Code kompiliert, zeigt es, dass es keine Fehler hat. Aber als ich es ausführte, gab es mir diesen Fehler.

Das ist, weil Ihr Programm keine syntax errors hat, aber runtime error(s) trifft.

Konzentrieren Sie sich jetzt auf die äußere Schleife (for(i...)). Sie haben die folgende Aussage

cin >> i; 

Note geschrieben, i ist die Schleifenvariable. Wenn Sie also das erste Element der ersten Zeile eingeben, wird es tatsächlich in i und somit wird die Schleife total durcheinander gebracht. () Möglicherweise erhalten Sie einen array index out of bounds Fehler hier.) Also, was haben Sie zu tun ist, die die gesamte verschachtelte Schleifenstruktur in dieser ändern:

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*/ 

Grundsätzlich Sie versuchen, Elemente in ein Array zu lesen, aber waren nicht vertraut mit der korrekten Syntax. i und j beziehen sich nicht direkt auf die Elemente in Zeile i und Spalte j; Die richtige Syntax für den Zugriff auf ein Array-Element in Zeile i und Spalte j ist SumMatrix[i][j].

Beachten Sie auch, dass die Aussage

sum += SumMatrix[i][j]; 

wie im Code geschrieben, die außerhalb der Schleife ist, fügt nur das letzte Element des Arrays auf die Summe. Um die Summe aller Elemente zu erhalten, musst du es in einer Schleife machen, wie ich oben gezeigt habe.

Verwandte Themen