Clasa a VI-a lecția 7 - 3 nov 2015
Concurs - rezolvări
Tema - rezolvări
- paritate, dată la concurs.
- nrbin, dată la concurs.
- submulţimi 2
Rezolvări aici [1]
Lecție
Matrice
Matricele sînt asemănătoare cu vectorii, dar cu două dimensiuni (coordonate, poziții) în loc de una. Vectorii se mai numesc și tablouri unidimensionale, iar matricele se mai numesc și tablouri bidimensionale.
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) ) {
j++;
if ( j >= n ) {
j = 0;
i++;
}
}
Transpunere matrice
Temă în clasă: 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;
}
Tema
- matrix exercițiu de lucru cu matrice la vianuarena
- reorganizare (ONI 2003, clasa a 6-a)
Rezolvări aici [2]