Afișarea Elementelor unei Matrice în Funcție de Zone 32
1. Obiectivele lecției:
- Să înțeleagă cum să împartă o matrice în zone specifice.
- Să implementeze algoritmi pentru afișarea elementelor din diferite zone ale matricei (ex: deasupra diagonalei principale, sub diagonala secundară, etc.).
- Să aplice acest concept în probleme practice care implică manipularea matricelor.
2. Conținutul lecției:
Definirea zonelor în matrice
O matrice pătratică de dimensiune n×nn poate fi împărțită în mai multe zone, în funcție de pozițiile relative ale elementelor față de diagonalele principale și secundare:
- Zona deasupra diagonalei principale:
- Elementele pentru care i<j.
- Zona sub diagonala principală:
- Elementele pentru care i>j .
- Zona deasupra diagonalei secundare:
- Elementele pentru care j<n−i−1 .
- Zona sub diagonala secundară:
- Elementele pentru care j>n−i−1.
Algoritmul pentru identificarea elementelor în funcție de zone
- **Identificați relația dintre indicele de rând (i) și indicele de coloană (j).
- Aplicați condițiile pentru fiecare zonă.
- Afișați sau prelucrați elementele corespunzătoare zonei dorite.
3. Cod în C++
Exemplu: Afișarea elementelor în funcție de zone
#include <iostream>
using namespace std;
void afisareZonaDeasupraDiagonaleiPrincipale(int mat[][4], int dim) {
cout << „Elementele deasupra diagonalei principale sunt: „;
for (int i = 0; i < dim; i++) {
for (int j = i + 1; j < dim; j++) {
cout << mat[i][j] << ” „;
}
}
cout << endl;
}
void afisareZonaSubDiagonalaPrincipala(int mat[][4], int dim) {
cout << „Elementele sub diagonala principala sunt: „;
for (int i = 1; i < dim; i++) {
for (int j = 0; j < i; j++) {
cout << mat[i][j] << ” „;
}
}
cout << endl;
}
void afisareZonaDeasupraDiagonaleiSecundare(int mat[][4], int dim) {
cout << „Elementele 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 afisareZonaSubDiagonalaSecundara(int mat[][4], int dim) {
cout << „Elementele 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}
};
cout << „Matricea initiala:” << endl;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
cout << mat[i][j] << ” „;
}
cout << endl;
}
afisareZonaDeasupraDiagonaleiPrincipale(mat, 4);
afisareZonaSubDiagonalaPrincipala(mat, 4);
afisareZonaDeasupraDiagonaleiSecundare(mat, 4);
afisareZonaSubDiagonalaSecundara(mat, 4);
return 0;
}
4. Complexitatea algoritmului
- Complexitate temporală:
- Toate operațiile implică parcurgerea unui subset al elementelor matricei, deci complexitatea este O(n2), unde n este dimensiunea matricei.
- Complexitate spațială:
- O(1), deoarece nu necesită memorie suplimentară.
5. Activități practice pentru elevi
- Scrieți un program care afișează suma elementelor dintr-o anumită zonă (de exemplu, deasupra diagonalei principale).
- Implementați un program care înlocuiește toate elementele dintr-o zonă cu valoarea 0.
- Realizați un program care determină diferența dintre suma elementelor din zonele deasupra și sub diagonala principală.
6. Scheme logice
- Identificarea unei zone:
- Start -> Parcurge elementele matricei -> Verifică relația dintre i și j -> Afișează sau procesează elementul -> Stop.
7. Concluzie:
- Împărțirea unei matrice în zone este o tehnică fundamentală pentru procesarea datelor matriceale.
- Înțelegerea relației dintre indicele de rând și coloană este esențială pentru a manipula eficient elementele.