Clasa a IX-a lecția 13 - 1 feb 2020
Clasament teme lecțiile 1 - 12
Clasamente avansați
Avansați Infoarena
Avansați Varena
Clasamente începători
Începători Varena
Începători Infoarena
Lecție
Matrice
Sursă: IQAcademy
Matricele sunt asemănătoare cu vectorii, dar cu două dimensiuni.
Declarare matrice
Matricele se declară similar cu vectorii, însă cu o dimensiune în plus:
int a[100][500];
Primul număr, 100 în cazul nostru, reprezintă numărul de linii al matricei a. Al doilea număr, 500 în exemplul de mai sus, reprezintă numărul de coloane al matricei a, sau numărul de elemente al fiecărei linii. O matrice poate fi privită ca un vector de vectori. În exemplul de mai sus a poate fi privită ca un vector de 100 de elemente. Fiecare element al acestui vector este, la rândul lui, un alt vector, de 500 de elemente. Numărul total de elemente al matricei a este 100 x 500, adică 50000 de elemente întregi.
Citire matrice
Cum citim o matrice? Asemănător cu un vector, vom citi mai întîi numărul de linii și numărul de coloane, apoi elementele. Elementele se citesc, în general, de-a lungul liniilor, fiecare linie fiind citită ca un vector:
...
fscanf(fin, "%d%d", &m, &n);
for (i = 0; i < m; ++i)
for (j = 0; j < n; ++j)
fscanf(fin, "%d", &a[i][j]);
Scriere matrice
Scrierea este asemănătoare cu citirea, cu mențiunea să avem grijă să tipărim un '\n' la finalul fiecărei linii:
...
for (i = 0; i < m; ++i) {
for (j = 0; j < n; ++j)
fprintf(fout, "%d ", a[i][j]);
fprintf(fout, "\n");
}
Căutare element în matrice
i = j = 0;
while ((i < m) && (a[i][j] != e)) { // cat timp nu am trecut de ultima linie si numarul pe care suntem nu este cel cautat
j++; // trecem pe urmatoarea coloana
if (j >= n) { // daca am trecut de ultima coloana
i++; // trecem pe urmatoarea linie
j = 0; // resetam coloana pe zero
}
}
Transpunere matrice
Se dă o matrice pătrată, să se modifice astfel încît în final elementele ei să fie oglindite față de diagonala principală. Diagonala principală e cea care începe în colțul din stînga-sus și se termină în colțul din dreapta-jos. Această operațiune se mai numește si transpunere.
for ( i = 1; i < n; i++ )
for ( j = 0; j < i; j++ ) {
aux = a[i][j];
a[i][j] = a[j][i];
a[j][i] = aux;
}
Aceeași problemă pentru diagonala secundară. Diagonala secundară e cea care începe în colțul din dreapta-sus și se termină în colțul din stînga-jos
for ( i = 0; i < (n - 1); i++ )
for ( j = 0; j < (n - i); j++ ) {
aux = a[i][j];
a[i][j] = a[n - 1 - j][n - 1 - i];
a[n - 1 - j][n - 1 - i] = aux;
}
Aplicații
varena - matrix
varena - diagonal
varena - zoomx2
varena - cautare
Pentru cei începători
Am reluat construirea unui vector cu numere prime utilizând ciurul lui Eratostene și am dat ca exemplu de utilitate descompunerea rapidă în factori primi a multor numere.
Temă
varena - matrix
varena - diagonal
varena - zoomx2
varena - cautare
infoarena - cri (Bonus)
În plus pentru începători
infoarena - maxd
infoarena - vase (Opțional)