Pentru tabloul bidimensional dat din n linii şi m coloane să se
afişeze la ecran următorul meniu de opţiuni:
1. Alocarea dinamică a memoriei pentru tablourile
bidimensionale
2. Introducerea elementelor tabloului de la tastatură
3. Completarea tabloului cu valori aleatorii
4. Sortarea elementelor tabloului (cоnform variantelor)
5. Afișarea elementelor tabloului la ecran
6. Eliberarea memoriei alocate pentru tablou
0. Ieșire din program
Să se elaboreze funcţiile pentru realizarea opţiunilor meniului.
Variante pentru sortare (pentru opțiunea 4 din meniu):
Să se sorteze liniile tabloului în ordine ascendentă
cu ajutorul metodei de sortare prin inserție.
Răspunsuri la întrebare
#include <iostream>
#include <ctime>
#include <random>
using namespace std;
//Alocare dinamica matrice
int** alocare_matrice(int nLinii, int nColoane) {
int** p = new int* [nLinii];
for (int index = 0; index < nLinii; index++)
p[index] = new int[nColoane];
return p;
}
//Dealocare matrice
void dealocare_matrice(int **matrice, int nLinii) {
for (int index = 0; index < nLinii; index++)
delete[] matrice[index];
delete[] matrice;
}
//Afisare matrice
void afisare_matrice(int** matrice, int nLinii, int nColoane) {
cout << endl;
for (int i = 0; i < nLinii; i++) {
cout << endl;
for (int j = 0; j < nColoane; j++) {
cout << matrice[i][j] << " ";
}
}
cout << endl;
}
//Citire date
void citire_date(int **matrice, int& nLinii, int& nColoane) {
cout << "Introduceti elementele matricei : ";
for (int linie = 0; linie < nLinii; linie++) {
for (int coloana = 0; coloana < nLinii; coloana++) {
cin >> matrice[linie][coloana];
}
}
}
//Alocare cu elemente aleatorii
void aleatoriu(int** matrice, int& nLinii, int& nColoane) {
srand(time(0));
for (int linie = 0; linie < nLinii; linie++) {
for (int coloana = 0; coloana < nLinii; coloana++) {
matrice[linie][coloana]= rand();
}
}
}
//Insertion_sort
void insertionSort(int *array, int dim)
{
int i, cheie, j;
for (i = 1; i < dim; i++)
{
cheie = array[i];
j = i - 1;
while (j >= 0 && array[j] > cheie)
{
array[j + 1] = array[j];
j = j - 1;
}
array[j + 1] = cheie;
}
}
//Sortarii linii matrice
void sortare_matrice_linii(int** matrice, int n_linii, int n_coloane) {
for (int index = 0; index < n_linii; index++)
insertionSort(matrice[index], n_coloane);
}
int meniu() {
cout << "\n1. Alocarea dinamica a memoriei pentru tablourile dimensionale";
cout << "\n2. Introducerea elementelor tabloului de la tastatura";
cout << "\n3. Completarea tabloului cu valori aleatorii";
cout << "\n4. Sortarea elementelor tabloului";
cout << "\n5. Afisarea elementelor tabloului la ecran";
cout << "\n6. Eliberarea memoriei alocate pentru tablou";
cout << "\n0. Iesire din program";
int alegere;
cout << "\n\tAlegere : ",cin >> alegere;
return alegere;
}
int main() {
int optiune=meniu();
int** matrice=NULL;
int n_linii, n_coloane;
while (optiune) {
switch (optiune)
{
case 1:
if (matrice) {
cout << "\nEroare, matricea e deja alocata !";
exit(1);
}
cout << "\nIntroduceti numarul de linii si coloane : ";
cin >> n_linii >> n_coloane;
matrice = alocare_matrice(n_linii, n_coloane);
break;
case 2:
if (matrice) {
cout << "\nEroare, matricea nu e alocata !";
exit(1);
}
citire_date(matrice, n_linii, n_coloane);
break;
case 3:
if (!matrice) {
cout << "\nEroare, matricea nu e alocata !";
exit(1);
}
aleatoriu(matrice, n_linii, n_coloane);
break;
case 4:
if (!matrice) {
cout << "\nEroare, matricea nu e alocata !";
exit(1);
}
sortare_matrice_linii(matrice, n_linii, n_coloane);
break;
case 5:
if (!matrice) {
cout << "\nEroare, matricea nu e alocata !";
exit(1);
}
afisare_matrice(matrice, n_linii, n_coloane);
break;
case 6:
if (!matrice) {
cout << "\nEroare, matricea nu e alocata !";
exit(1);
}
dealocare_matrice(matrice, n_linii);
break;
case 0:
if (matrice)dealocare_matrice(matrice, n_linii);
exit(0);
break;
default:
cout << "\nEroare, nu ati selectat o optiune valida !";
break;
}
optiune = meniu();
}
}