online: 4; azi: 734; total: 52740 Manual clasa a ix a - Implementarea structurilor de date - Structuri de date

Probleme Rezolvate



Manual clasa a IX a

Implementarea structurilor de date

Structuri de date

Se consideră o matrice pătrată cu elemente nu mere întregi cu dimensiunea nxn . Numărul n şi elementele matricei se citesc de la tastatură . Să se ordoneze :
a) crescător , elementele de pe diagonala principală , folosind metoda selecţiei
directe ;
b) descrescător , elementele de pe diagonala secundară , folosind metoda
bulelor ;
c) crescător , elementele de pe linia p, folosind metoda inserării directe
( p se citeşte de la tastatură );
d) descrescător , elementele de pe coloana q, folosind metoda inserării rapide
( q se citeşte de la tastatură ).
a) crescător , elementele de pe diagonala principală , folosind metoda selecţiei
directe ;
Pentru a ordona crescător elementele de pe diagonala principală a unei matrice pătrate de dimensiunea n x n, se poate utiliza metoda selecției directe. Acest algoritm constă în a căuta, pentru fiecare element de pe diagonală, cel mai mic element din partea dreaptă a sa și să îl interschimbăm cu acel element. După aceasta, se mută în dreapta cu o poziție și se caută pentru elementul nou găsit cel mai mic element din partea dreaptă și se interschimbă iarăși. Procesul se repetă până când se ajunge la ultimul element de pe diagonală.
# include < iostream >
using namespace std ;
int main ()
{
int n;
cout << " Introduceti dimensiunea matricei: " ;
cin >> n;
int a[n][n];
cout << " Introduceti elementele matricei:\n" ;
for ( int i = 0 ; i < n; i++) {
for ( int j = 0 ; j < n; j++) {
cin >> a[i][j];
}
}
for ( int i = 0 ; i < n; i++) {
int min_idx = i;
for ( int j = i + 1 ; j < n; j++) {
if (a[j][j] < a[ min_idx ][ min_idx ]) {
min_idx = j;
}
}
if ( min_idx != i) {
for ( int k = 0 ; k < n; k++) {
int temp = a[i][k];
a[i][k] = a[ min_idx ][k];
a[ min_idx ][k] = temp ;
}
}
}
cout << "Matricea ordonata este:\n" ;
for ( int i = 0 ; i < n; i++) {
for ( int j = 0 ; j < n; j++) {
cout << a[i][j] << " " ;
}
cout << endl ;
}
return 0 ;
}
În acest program, citim mai întâi dimensiunea matricei și elementele acesteia de la tastatură. Apoi, utilizând două bucle for, căutăm cel mai mic element din partea dreaptă a fiecărui element de pe diagonală și îl interschimbăm cu acel element. După finalizarea procesului de sortare, afișăm matricea ordonată.
b) descrescător , elementele de pe diagonala secundară , folosind metoda
bulelor ;
Pentru a ordona descrescator elementele de pe diagonala secundara a matricei cu dimensiunea nxn , putem utiliza metoda bulelor. Ideea este de a parcurge matricea de la coltul stanga -jos la coltul dreapta-sus, verificand daca elementul curent se afla pe diagonala secundara. Daca se afla, il memoram intr -un vector si continuam parcurgerea matricei. Dupa ce am completat vectorul cu toate elementele de pe diagonala secundara, il ordonam descrescator folosind metoda bulelor.
# include < iostream >
using namespace std ;
const int MAX = 100 ;
int main () {
int n, a[MAX][MAX], d[MAX], k = 0 ;
cout << " Introduceti dimensiunea matricei: " ;
cin >> n;
cout << " Introduceti elementele matricei: \n" ;
for ( int i = 0 ; i < n; i++) {
for ( int j = 0 ; j < n; j++) {
cin >> a[i][j];
if (i + j == n - 1 ) { // daca elementul se afla pe diagonala secundara
d[k++] = a[i][j]; // il memoram in vector
}
}
}
// ordonam descrescator vectorul cu elementele de pe diagonala secundara
for ( int i = 0 ; i < k - 1 ; i++) {
for ( int j = 0 ; j < k - i - 1 ; j++) {
if (d[j] < d[j+ 1 ]) {
swap (d[j], d[j+ 1 ]);
}
}
}
// afisam vectorul ordonat
cout << "Elementele de pe diagonala secundara ordonate descrescator : " ;
for ( int i = 0 ; i < k; i++) {
cout << d[i] << " " ;
}
cout << endl ;
return 0 ;
}
Observam ca dupa citirea elementelor matricei, parcurgem matricea si memoram in vectorul d toate elementele care se afla pe diagonala secundara. Dupa aceasta, ordonam vectorul descrescator folosind metoda bulelor, iar la final afisam vectorul ordona
In loc de functia swap () putem folosii:
int temp = a;
a = b;
b = temp ;
c) crescător , elementele de pe linia p, folosind metoda inserării directe
Pentru a ordona crescator elementele de pe linia p a matricei, folosim metoda inserției directe. În acest algoritm, se parcurge matricea pe linii și se compară fiecare element cu cele dinaintea lui pe aceeași linie. Dacă elementul curent este mai mic decât elementul dinaintea lui, atunci se interschimbă pozițiile celor două elemente. Acest proces se repetă pentru toate elementele de pe linia p.
# include < iostream >
using namespace std ;
int main ()
{
int n, p;
cout << " Introduceti dimensiunea matricei: " ;
cin >> n;
int a[n][n];
cout << " Introduceti elementele matricei:\n" ;
for ( int i = 0 ; i < n; i++) {
for ( int j = 0 ; j < n; j++) {
cin >> a[i][j];
}
}
cout << " Introduceti linia p: " ;
cin >> p;
for ( int i = 0 ; i < n; i++) {
for ( int j = 1 ; j < n; j++) {
int key = a[p][j];
int k = j - 1 ;
while (k >= 0 && a[p][k] > key ) {
a[p][k+ 1 ] = a[p][k];
k--;
}
a[p][k+ 1 ] = key ;
}
}
cout << "Matricea ordonata pe linia " << p << " este:\n" ;
for ( int i = 0 ; i < n; i++) {
for ( int j = 0 ; j < n; j++) {
cout << a[i][j] << " " ;
}
cout << endl ;
}
return 0 ;
}
În acest cod, se citește dimensiunea matricei și elementele sale de la tastatură, precum și linia p. Apoi, se parcurge matricea pe linii și se aplică metoda inserției directe pentru a ordona elementele de pe linia p. La final, se afișează matricea ordonată.
d) descrescător , elementele de pe coloana q, folosind metoda inserării rapide
În implementarea metodei inserției rapide pentru a sorta descrescător elementele de pe o coloană dată a unei matrice pătrate, putem proceda astfel:
# include < iostream >
using namespace std ;
int main () {
int n, q;
cout << " Introduceti dimensiunea matricei: " ;
cin >> n;
// Initializare matrice
int a[n][n];
cout << " Introduceti elementele matricei:\n" ;
for ( int i = 0 ; i < n; i++) {
for ( int j = 0 ; j < n; j++) {
cin >> a[i][j];
}
}
cout << " Introduceti numarul coloanei (1-" << n << "): " ;
cin >> q;
// Verificare validitate q
if (q < 1 || q > n) {
cout << " Numarul coloanei este invalid!" ;
return 0 ;
}
// Sortare
for ( int i = 1 ; i < n; i++) {
int key = a[i][q -1 ];
int j = i -1 ;
while (j >= 0 && a[j][q -1 ] < key ) {
// Deplasare elemente
for ( int k = 0 ; k < n; k++) {
int temp = a[j+ 1 ][k];
a[j+ 1 ][k] = a[j][k];
a[j][k] = temp ;
}
j--;
}
// Inserare element
a[j+ 1 ][q -1 ] = key ;
}
// Afisare matrice sortata
cout << "Matricea sortata descrescator dupa coloana " << q << ":\n" ;
for ( int i = 0 ; i < n; i++) {
for ( int j = 0 ; j < n; j++) {
cout << a[i][j] << " " ;
}
cout << endl ;
}
return 0 ;
}