Vale la pena di ricordare che presentare codice di questo genere
in sede di esame o colloquio lavorativo può comportare una bocciatura/rifiuto, o nel migliore dei casi un drastico abbassamento del voto.codice:cout<<"\n Diagonale 1= "; for (i=0; i<n1; i++) { for (j=0; j<n2; j++) { if(i==j) { cout<<mat[i][j]<< " "; } } }
Non è assolutamente necessario usare addirittura due variabili di induzione e un duplice loop annidato (con complessità computazionale quadratica!) contenente per giunta una if() per stampare valori in posizioni notevoli di una matrice quadrata. Tutti gli indici possono (e devono) essere ricavati linearmente da una singola variabile di induzione tramite banali manipolazioni aritmetiche. Nel caso della diagonale principale, ciascun elemento è identificabile come ai,i mentre per l'antidiagonale o diagonale secondaria vale la ben nota proprietà che la somma degli indici è costante, e pari alla dimensione della matrice, proprietà peraltro già richiamata nel corso del thread. In tal modo si evitano inefficienze assai rilevanti, che possono risultare fortemente penalizzanti in molti contesti.