Ștergerea unei linii și a unei coloane dintr-o matrice în C++ 28
1. Obiectivele lecției:
- Să înțeleagă cum să elimine o linie și o coloană dintr-o matrice.
- Să implementeze un algoritm pentru ștergerea unei linii și a unei coloane.
- Să aplice acest concept pentru probleme practice.
2. Conținutul lecției:
Conceptul de ștergere a unei linii și a unei coloane
- Ștergerea unei linii: Eliminați toate elementele unei linii din matrice, deplasând liniile de sub aceasta în sus.
- Ștergerea unei coloane: Eliminați toate elementele unei coloane, deplasând coloanele din dreapta acesteia spre stânga.
Pașii algoritmului:
Pentru ștergerea unei linii:
- Identificați indexul liniei care trebuie eliminată.
- Deplasați toate liniile de sub linia specificată cu o poziție în sus.
- Reduceți numărul de rânduri al matricei.
Pentru ștergerea unei coloane:
- Identificați indexul coloanei care trebuie eliminată.
- Deplasați toate elementele din coloanele din dreapta acesteia cu o poziție spre stânga.
- Reduceți numărul de coloane al matricei.
Pseudocod:
Ștergere linie:
Pentru i de la linie la nr_rânduri – 2:
Pentru j de la 0 la nr_coloane – 1:
matrice[i][j] = matrice[i + 1][j]
nr_rânduri–
Ștergere coloană:
Pentru i de la 0 la nr_rânduri – 1:
Pentru j de la coloană la nr_coloane – 2:
matrice[i][j] = matrice[i][j + 1]
nr_coloane–
3. Cod în C++
Exemplu: Ștergerea unei linii și a unei coloane
#include <iostream>
using namespace std;
void afisareMatrice(int mat[][10], int rânduri, int coloane) {
for (int i = 0; i < rânduri; i++) {
for (int j = 0; j < coloane; j++) {
cout << mat[i][j] << ” „;
}
cout << endl;
}
}
void stergereLinie(int mat[][10], int& rânduri, int coloane, int linie) {
for (int i = linie; i < rânduri – 1; i++) {
for (int j = 0; j < coloane; j++) {
mat[i][j] = mat[i + 1][j];
}
}
rânduri–; // Reducem numărul de rânduri
}
void stergereColoana(int mat[][10], int rânduri, int &coloane, int coloana) {
for (int i = 0; i < rânduri; i++) {
for (int j = coloana; j < coloane – 1; j++) {
mat[i][j] = mat[i][j + 1];
}
}
coloane–; // Reducem numărul de coloane
}
int main() {
int mat[10][10] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
int rânduri = 4, coloane = 4;
cout << „Matrice initiala:” << endl;
afisareMatrice(mat, rânduri, coloane);
int linieDeSters, coloanaDeSters;
cout << „Introduceti linia de sters (0-index): „;
cin >> linieDeSters;
stergereLinie(mat, rânduri, coloane, linieDeSters);
cout << „Matrice dupa stergerea liniei ” << linieDeSters << „:” << endl;
afisareMatrice(mat, rânduri, coloane);
cout << „Introduceti coloana de sters (0-index): „;
cin >> coloanaDeSters;
stergereColoana(mat, rânduri, coloane, coloanaDeSters);
cout << „Matrice dupa stergerea coloanei ” << coloanaDeSters << „:” << endl;
afisareMatrice(mat, rânduri, coloane);
return 0;
}
4. Complexitatea algoritmului
- Ștergerea unei linii:
- Complexitate temporală: O(n⋅m), unde n este numărul de rânduri și mmm numărul de coloane.
- Complexitate spațială: O(1), deoarece nu necesită memorie suplimentară.
- Ștergerea unei coloane:
- Complexitate temporală: O(n⋅m), deoarece fiecare coloană implică modificarea tuturor rândurilor.
- Complexitate spațială: O(1).
5. Activități practice pentru elevi
- Implementați un program care șterge simultan mai multe linii și coloane specificate de utilizator.
- Scrieți un program care șterge linia și coloana ce conține valoarea maximă din matrice.
- Realizați un program care transformă matricea într-o matrice pătratică, ștergând rânduri și coloane.
6. Scheme logice
- Ștergere linie:
- Start -> Iterează prin rânduri -> Deplasează rândurile inferioare în sus -> Actualizează dimensiunea -> Stop.
- Ștergere coloană:
- Start -> Iterează prin coloane -> Deplasează coloanele din dreapta spre stânga -> Actualizează dimensiunea -> Stop.
7. Concluzie:
- Ștergerea unei linii și a unei coloane dintr-o matrice implică manipularea elementelor rămase pentru a păstra structura matricei.
- Înțelegerea acestui proces este utilă în rezolvarea problemelor care implică procesarea matricelor în aplicații complexe.