Afișarea Elementelor unei Matrice în Funcție de Diagonala Secundară 31
1. Obiectivele lecției:
- Să înțeleagă conceptul de diagonală secundară a unei matrice.
- Să implementeze algoritmi pentru afișarea elementelor aflate pe, sub sau deasupra diagonalei secundare.
- Să aplice acest concept în probleme practice.
2. Conținutul lecției:
Ce este diagonala secundară a unei matrice?
- Definiție: Diagonala secundară a unei matrice pătratice este formată din elementele situate pe linia iii și coloana n−i−1n – i – 1n−i−1, unde iii variază de la 0 la n−1n-1n−1 (dimensiunea matricei).
- Exemplu: Matricea AAA de dimensiune 4×44 \times 44×4: A=[12345678910111213141516]A = \begin{bmatrix} 1 & 2 & 3 & 4 \\ 5 & 6 & 7 & 8 \\ 9 & 10 & 11 & 12 \\ 13 & 14 & 15 & 16 \end{bmatrix}A=15913261014371115481216
- Diagonala secundară: 4,7,10,134, 7, 10, 134,7,10,13
- Deasupra diagonalei secundare: 1,2,3,61, 2, 3, 61,2,3,6
- Sub diagonala secundară: 8,11,12,14,15,168, 11, 12, 14, 15, 168,11,12,14,15,16
Algoritmul pentru identificarea poziției elementelor
- Pe diagonala secundară:
- Elementele se află pe pozițiile j=n−i−1j = n – i – 1j=n−i−1.
- Deasupra diagonalei secundare:
- Elementele se află pe pozițiile j<n−i−1j < n – i – 1j<n−i−1.
- Sub diagonala secundară:
- Elementele se află pe pozițiile j>n−i−1j > n – i – 1j>n−i−1.
3. Cod în C++
Exemplu 1: Afișarea elementelor pe diagonala secundară
#include <iostream>
using namespace std;
void afisareDiagonalaSecundara(int mat[][4], int dim) {
cout << „Elementele de pe diagonala secundara sunt: „;
for (int i = 0; i < dim; i++) {
cout << mat[i][dim – i – 1] << ” „;
}
cout << endl;
}
int main() {
int mat[4][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
afisareDiagonalaSecundara(mat, 4);
return 0;
}
Exemplu 2: Afișarea elementelor deasupra și sub diagonala secundară
#include <iostream>
using namespace std;
void afisareDeasupraDiagonaleiSecundare(int mat[][4], int dim) {
cout << „Elementele de deasupra diagonalei secundare sunt: „;
for (int i = 0; i < dim; i++) {
for (int j = 0; j < dim – i – 1; j++) {
cout << mat[i][j] << ” „;
}
}
cout << endl;
}
void afisareSubDiagonalaSecundara(int mat[][4], int dim) {
cout << „Elementele de sub diagonala secundara sunt: „;
for (int i = 0; i < dim; i++) {
for (int j = dim – i; j < dim; j++) {
cout << mat[i][j] << ” „;
}
}
cout << endl;
}
int main() {
int mat[4][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
afisareDeasupraDiagonaleiSecundare(mat, 4);
afisareSubDiagonalaSecundara(mat, 4);
return 0;
}
4. Complexitatea algoritmului
- Afișarea elementelor pe diagonala secundară:
- Complexitate temporală: O(n)O(n)O(n), unde nnn este dimensiunea matricei.
- Complexitate spațială: O(1)O(1)O(1), deoarece nu necesită spațiu suplimentar.
- Afișarea elementelor deasupra/sub diagonalei secundare:
- Complexitate temporală: O(n2)O(n^2)O(n2), deoarece sunt procesate toate elementele relevante.
- Complexitate spațială: O(1)O(1)O(1).
5. Activități practice pentru elevi
- Realizați un program care calculează suma elementelor de pe diagonala secundară.
- Scrieți un program care înlocuiește toate elementele de deasupra diagonalei secundare cu 0.
- Realizați un program care afișează diferența dintre suma elementelor de pe diagonala principală și suma celor de pe diagonala secundară.
6. Scheme logice
- Elemente pe diagonala secundară:
- Start -> Iterează prin matrice -> Selectează mat[i][dim−i−1]mat[i][dim – i – 1]mat[i][dim−i−1] -> Afișează -> Stop.
- Elemente deasupra/sub diagonalei secundare:
- Start -> Iterează prin matrice -> Verifică condiția j<dim−i−1j < dim – i – 1j<dim−i−1 sau j>dim−i−1j > dim – i – 1j>dim−i−1 -> Afișează -> Stop.
7. Concluzie:
- Diagonala secundară este un concept important în manipularea matricelor, utilizat frecvent în probleme de procesare a datelor și algoritmică.
- Înțelegerea pozițiilor relative față de diagonala secundară ajută la manipularea eficientă a matricelor în aplicații practice.