|

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:

  1. Zona deasupra diagonalei principale:
    • Elementele pentru care i<j.
  2. Zona sub diagonala principală:
    • Elementele pentru care i>j .
  3. Zona deasupra diagonalei secundare:
    • Elementele pentru care j<n−i−1 .
  4. Zona sub diagonala secundară:
    • Elementele pentru care j>n−i−1.

Algoritmul pentru identificarea elementelor în funcție de zone

  1. **Identificați relația dintre indicele de rând (i) și indicele de coloană (j).
  2. Aplicați condițiile pentru fiecare zonă.
  3. 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

  1. Complexitate temporală:
    • Toate operațiile implică parcurgerea unui subset al elementelor matricei, deci complexitatea este O(n2), unde n este dimensiunea matricei.
  2. Complexitate spațială:
    • O(1), deoarece nu necesită memorie suplimentară.

5. Activități practice pentru elevi

  1. Scrieți un program care afișează suma elementelor dintr-o anumită zonă (de exemplu, deasupra diagonalei principale).
  2. Implementați un program care înlocuiește toate elementele dintr-o zonă cu valoarea 0.
  3. Realizați un program care determină diferența dintre suma elementelor din zonele deasupra și sub diagonala principală.

6. Scheme logice

  1. 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.

Similar Posts

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *