berechnen Sie die Summe der diagonalen in der matrix
Brauche ich zur Berechnung die Summe der beiden diagonalen in einer matrix in C++, ich habe bereits eine Lösung für, aber ich muss stumm sein, denn ich kann nicht verstehen, was es tut, so würde ich gerne wissen, ob es eine andere version, die ich verstehen kann. hier ist der code der die Arbeit macht:
cout<<"Jepi rangun e matrices"<<endl; //pra bejme manipulim me matrice katrore ku rreshtat=kolonat
cin>>n;
cout<<"Tani jepi elementet e matrices"<<endl; //lexohet matrica
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cin>>a[i][j];
}
d=0;
s=0; //ketu e keni kushtin si dhe mbledhjen per te dy diagonalet me dy variabla te ndryshme
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(i==j)
d=d+a[i][j];
if(j==n-i+1 || i==n-j+1)
s=s+a[i][j];
}
Den Teil, der schwer zu verstehen ist,
if(j==n-i+1 || i==n-j+1)
s=s+a[i][j];
Hier ist der gesamte code, den ich geändert aber es funktioniert nicht für die sekundäre Diagonale:
#include <iostream>
using namespace std;
int main()
{
int d=0,s=0; //ketu e keni kushtin si dhe mbledhjen per te dy diagonalet me dy variabla te ndryshme
int i,j,n;
int a[5][5];
cout<<"Jepi rangun e matrices"<<endl; //pra bejme manipulim me matrice katrore ku rreshtat=kolonat
cin>>n;
cout<<"Tani jepi elementet e matrices"<<endl; //lexohet matrica
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cin>>a[i][j];
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i==j)
d+=a[i][j]; //principal diagonal
if(i+j==n-1)
s+=a[i][j];//secondary diagonal
}
}
cout << d << endl;
cout << s << endl;
cin.get();
cin.get();
return 0;
}
- Haben Sie eine spezifische Frage über irgendeinen Teil dieser code?
- ja das ist das problem: falls(j==n-i+1 || i==n-j+1) s=s+a[i][j];
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es wäre schön, wenn Kommentare in Englisch, aber, die Ihr code wird (zweite Schleife):
Die viel schöner und viel effektiver Programmcode (mit
n
stattn^2
) wäre:Dieser geht direkt durch die diagonalen (sowohl in die eine Schleife!) und geht nicht durch Gegenstände.
EDIT:
Hauptdiagonale hat die Koordinaten
{(1,1), (2,2), ..., (i,i)}
(dazui == j
).Sekundären diagonalen Koordinaten (matrix 3x3):
{(1,3), (2,2),(3,1)}
was in der Regel:{(1,n-1+1), (2, n-2+1), ... (i, n-i+1), .... (n,1)}
. Aber in C arrays werden indiziert von 0, nicht 1, so brauchen Sie nicht, dass+1
(wahrscheinlich).Alle diese Elemente, die in sekundären diagonalen als passen Zustand:
i == n - j + 1
(wieder durch C ist die Indizierung von 0+1
änderungen-1
(i=0,
,n=3
,j=2
,j = n - i - 1
)).Erreichen Sie all dies in einer Schleife (code oben).
j=6;
was außerhalb der Grenzen (ich nehme anj=4
ist richtig in diesem Fall).}
Verstehen dieses Algorithmus ist besser, sollten Sie malen eine matrix, die auf Ihr notebook und die Anzahl Elemente mit Ihrer position in der matrix,dann wenden Sie den Algorithmus Schritt für Schritt durch.Ich bin mir 100% sicher, dass Sie verstehen,
Ich versuche zu erklären, diese version? 😀
Gibt es 3 wichtige Teile des Codes:
Und hier sind Sie, erklärte:
Hier -, d-und s enthalten die inter-Werte von großen und kleinen diagonalen jeweils. Am Ende der 2-Schleifen, Sie enthalten die Ergebnisse
Hoffe, das hilft.
Beachten Sie, dass dieser code startet die matrix-Koordinaten auf 1 statt auf 0, so dass Sie wirklich brauchen, um zu reservieren
(n+1)x(n+1)
Raum für die matrix:bevor Sie es verwenden.
Auch, den code, den Sie gab, ist nicht besonders effektiv sind. Es hat
O(n^2)
Komplexität, während die Aufgabe getan werden kann, inO(n)
etwa so:müssen Sie
i + j == n + 1
statti + j == n - 1
für sekundäre Diagonale ich.e