Summe der unabhängigen Diagonalen in einer Matrix

8

Ich lerne gerade für eine Prüfung und versuche, mit der dynamischen Matrix umzugehen. Ich bin auf ein Problem bezüglich der Berechnung der Summe jeder Diagonale einer Matrix gestoßen, deren Werte und Größe vom Benutzer gewählt werden. Die Absicht meines Programms ist das Drucken, dank einer Funktion, deren Parameter die Matrix und ihre Größe sind, der Wert jeder Diagonalsumme. Ich zeige Ihnen den Code und beschreibe ihn ausführlich.

%Vor%

Das ist, was ich meiner Meinung nach tun wollte:

%Vor%

Offensichtlich funktioniert es nicht, aber ich kann das Problem nicht herausfinden.

    
King Powa 01.02.2018, 20:10
quelle

2 Antworten

2

Sie können Ihren Code vereinfachen, indem Sie die Startposition jeder Diagonale finden und dann durch die Matrix gehen, solange die Koordinaten innerhalb der Matrix bleiben. Etwas wie das:

%Vor%     
tevemadar 01.02.2018 20:43
quelle
1

(Früher gab es hier einen Absatz, aber bei einem zweiten Blick haben Sie nicht den Fehler gemacht, über den gesprochen wurde.)

Da Sie nicht in Code Reviews gepostet haben, finden Sie hier eine Lösung statt einer detaillierten Codeüberprüfung. (Wenn Sie den ursprünglichen Ansatz arbeiten wollen, würde ich vorschlagen, ihn in einem Debugger einzeln zu durchlaufen und zu prüfen, wo Ihre Variablen zuerst den falschen Wert erhalten.) Es hat eine Menge Vortex, um es kompilieren und ausführen zu lassen, aber das Teil, an dem Sie am meisten interessiert sind, ist diag_sums() und seine Kommentare.

Eine Idee ist hier, OOP zu verwenden, um die Grenzen Ihrer Array-Zugriffe automatisch zu überprüfen. Letzteres ist sehr wichtig für die Erfassung von Fehlern und dergleichen. Sie können es in der Produktion ausschalten, wenn Sie möchten, aber Sie möchten Warnungen wirklich nicht stummschalten, wenn Ihr Programm einen Pufferüberlauf hat. Andere Optimierungen umfassen hier den Zugriff auf die Daten und die Reduzierung der Stärke der Operationen: anstatt jede Iteration zu überprüfen, ob wir die rechte Kante und die untere Kante getroffen haben, können wir einfach die Länge jeder Diagonalen im Voraus berechnen / p>

Da die Definition der diagonalen Zahl k der Matrix a mit M Zeilen äquivalent ist zu: alle Elemente a[i][j] so, dass M - k = i - j , der Algorithmus gewährleistet die Korrektheit, indem er die Invariante beibehält, die gilt, wenn wir beiden zu i und j , beginnend, wenn entweder i oder j 0 ist, und stoppt, wenn i = M oder j = N , dh jede Stufe der Diagonale von der linken oder oberen Kante zur rechten oder unteren Kante durchlaufen, je nachdem, was zuerst kommt.

%Vor%

Du könntest auch einfach print_sequence(diag_sums(read_input_matrix( rows, columns ))) machen.

    
Davislor 02.02.2018 01:19
quelle

Tags und Links