online: 8; azi: 1045; total: 53051 Manual clasa a x a - Tehnici de implementarea algoritmilor - Recursivitate

Manual clasa a X a

Tehnici de implementarea algoritmilor

Recursivitate

Pentru o matrice cu n linii şi m coloane, scrieţi un subprogram recursiv care să inverseze linia p cu linia q şi un subprogram recursiv care să inverseze coloana x cu coloana y.
# include < iostream >
using namespace std ;
void swap_rows ( int ** matrix , int p, int q, int m, int col = 0 ) {
if (col < m) {
swap ( matrix [p][col], matrix [q][col]);
swap_rows ( matrix , p, q, m, col + 1 );
}
}
void swap_columns ( int ** matrix , int x, int y, int n, int row = 0 ) {
if ( row < n) {
swap ( matrix [ row ][x], matrix [ row ][y]);
swap_columns ( matrix , x, y, n, row + 1 );
}
}
void print_matrix ( int ** matrix , int n, int m) {
for ( int i = 0 ; i < n; i++) {
for ( int j = 0 ; j < m; j++) {
cout << matrix [i][j] << ' ' ;
}
cout << endl ;
}
}
int main () {
int n, m, p, q, x, y;
cout << " Introduceti numarul de linii (n): " ;
cin >> n;
cout << " Introduceti numarul de coloane (m): " ;
cin >> m;
int ** matrix = new int *[n];
for ( int i = 0 ; i < n; i++) {
matrix [i] = new int [m];
}
cout << " Introduceti elementele matricii :" << endl ;
for ( int i = 0 ; i < n; i++) {
for ( int j = 0 ; j < m; j++) {
cin >> matrix [i][j];
}
}
cout << " Introduceti liniile de schimbat (p si q): " ;
cin >> p >> q;
cout << " Introduceti coloanele de schimbat (x si y): " ;
cin >> x >> y;
swap_rows ( matrix , p, q, m);
swap_columns ( matrix , x, y, n);
cout << "Matricea dupa inversarea liniilor " << p << " si " << q << " si coloanelor " << x << " si " << y << ":" << endl ;
print_matrix ( matrix , n, m);
for ( int i = 0 ; i < n; i++) {
delete [] matrix [i];
}
delete [] matrix ;
return 0 ;
}

Acest program utilizează subprogramele recursive swap_rows () și swap_columns () pentru a inversa liniile și coloanele specificate ale matricii . Funcția print_matrix () este utilizată pentru a afișa matricea rezultată după inversare.
Pentru a rula acest program, introduceți numărul de linii și coloane ale matricei, apoi introduceți elementele matricii . Introduceți apoi liniile și coloanele pe care doriți să le inversați, iar programul va afișa matricea rezultată după inversare.
Linia swap ( matrix [ row ][x], matrix [ row ][y]); schimbă valorile a două elemente ale matricei: unul de pe coloana x și celălalt de pe coloana y , ambele de pe același rând (linie) row . Funcția swap () este o funcție standard din C++ care realizează schimbarea a două valori între ele.
Dacă doriți să implementați această funcționalitate fără a folosi funcția swap () , puteți folosi o variabilă temporară pentru a realiza schimbul. Iată cum puteți înlocui linia respectivă:
int temp = matrix [ row ][x];
matrix [ row ][x] = matrix [ row ][y];
matrix [ row ][y] = temp ;
Aceste trei linii de cod fac același lucru ca funcția swap () . Mai întâi, se stochează valoarea elementului de pe coloana x într-o variabilă temporară temp . Apoi, se copiază valoarea elementului de pe coloana y în elementul de pe coloana x . În final, se copiază valoarea temporară stocată în temp (care reprezintă valoarea inițială a elementului de pe coloana x ) în elementul de pe coloana y . Astfel, se realizează schimbul valorilor dintre cele două elemente ale matricei.