Informatică, întrebare adresată de danycobzac, 8 ani în urmă

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

Răspuns de andrei750238
2

#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();

}

}

Anexe:

danycobzac: Multumesc
andrei750238: Cu placere !
Alte întrebări interesante