Răspuns :
Răspuns:
#include <iostream>
int** creareMatrice(size_t m, size_t n);
void ordoneazaLiniaCrescator(int** pMatrice, size_t m, size_t n, size_t k);
void afiseazaMatricea(int** pMatrice, size_t m, size_t n);
void stergeMatrice(int** pMatrice, size_t m);
int main() {
/* citim cele m linii și n coloane */
size_t m = 0, n = 0;
std::cout << "Cate linii si cate coloane (de ex. 3 3) >> ";
std::cin >> m >> n;
/* alocăm dinamic o matrice de m linii și n coloane, totodată inserăm și numerele citite de la tastatură*/
int** pMatrice = creareMatrice(m, n);
/* citim a câta linie s-o ordonăm crescător */
size_t k = 0;
std::cout << "A cata linie sa fie ordonata crescator (nr. max. " << m << ") ? >> ";
std::cin >> k;
/* (opțional) afișăm matricea înainte de interschimbarea coloanelor */
std::cout << "pMatrice inainte de interschimbare:\n";
afiseazaMatricea(pMatrice, m, n);
/* în această funcție se produce interschimbarea */
ordoneazaLiniaCrescator(pMatrice, m, n, k);
/* afișăm matricea după interschimbarea coloanelor */
std::cout << "\npMatrice dupa interschimbare:\n";
afiseazaMatricea(pMatrice, m, n);
/* și la final ștergem zona de memorie alocată mai sus */
stergeMatrice(pMatrice, m);
return 0;
}
int** creareMatrice(size_t m, size_t n) {
/* m (numărul de linii) și n (numărul de coloane) */
int** pMatrice = new int*[m];
for (size_t i = 0; i < m; i++) {
pMatrice[i] = new int[n];
for (size_t j = 0; j < n; j++) {
std::cout << "pMatrice[" << i << "][" << j << "] = ";
std::cin >> pMatrice[i][j];
}
}
return pMatrice;
}
void ordoneazaLiniaCrescator(int** pMatrice, size_t m, size_t n, size_t k) {
/* k (a câta linie să fie ordonată crescător), j (index-ul liniei respective) */
size_t j = k - 1;
/* parcurgem linia cu indexul j */
for (size_t i = 0; i < n - 1; i++) {
/* dacă numărul curent este mai mare decât următorul interschimbăm coloanele */
if (pMatrice[j][i] > pMatrice[j][i + 1]) {
/*
de exemplu pentru următoarea matrice dacă vrem să ordonăm crescător prima linie
|3 1 2 |
|4 2 3|
|5 1 6 |
observăm că pMatrice[j][i](3) > pMatrice[j][i+1](1) deci interschimbăm coloanele celor două numere vom porni practic de sus în jos (linie cu linie) și interschimbăm numerele de pe pozițiile l (care e indexul liniei) și i care e index-ul unde am găsit „problema” și o să avem:
||3| <=> |1| 2| |1 3 2|
||4| <=> |2| 3| => |2 4 3|
||5| <=> |1| 6| |1 5 6|
acuma la următoarea iterație o să observăm că 3 > 2, se face aceași chestie, rezultatul o să fie:
|1 |3| <=> |2|| |1 2 3|
|2 |4| <=> |3|| => |2 3 4|
|1 |5| <=> |6|| |1 6 5|
*/
for (size_t l = 0; l < m; l++) {
int nrTemp = pMatrice[l][i];
pMatrice[l][i] = pMatrice[l][i + 1];
pMatrice[l][i + 1] = nrTemp;
}
}
}
}
void afiseazaMatricea(int** pMatrice, size_t m, size_t n) {
for (int i = 0; i < m; i++) {
for (size_t j = 0; j < n; j++) {
std::cout << pMatrice[i][j] << " ";
}
std::cout << "\n";
}
}
void stergeMatrice(int** pMatrice, size_t m) {
for (size_t i = 0; i < m; i++) {
delete[] pMatrice[i];
}
delete[] pMatrice;
}
Vă mulțumim că ați ales să vizitați site-ul nostru dedicat Informatică. Sperăm că informațiile disponibile v-au fost utile. Dacă aveți întrebări sau aveți nevoie de asistență suplimentară, vă rugăm să ne contactați. Revenirea dumneavoastră ne va bucura, iar pentru acces rapid, nu uitați să ne salvați la favorite!