Se citeste un numar natural n. Folosind alocarea dinamica, creati o matrice triunghiulara cu proprietatea ca pe prima linie are un element, pe a doua are doua elemente, ... si pe a n-a linie n are elemente. Plasati in ordine in matrice numerele 1,2,3,.. n(n+1)/2 si afisati matricea pe ecran.
Exemplu: pentru n=4 se obtine matricea
1
2 3
4 5 6
7 8 9 10
Răspunsuri la întrebare
Răspuns:
#include <iostream>
using std::cout, std::endl, std::cin, std::size_t;
// funcția alocă dinamic o matrice triunghiulară
static int** creareMatrice(size_t numarLinii) {
// creăm un tablou de N int pointers pentru fiecare linie a matricii
int **pMatrice = new int *[numarLinii], k = 1;
for (size_t i = 1; i <= numarLinii; ++i) {
// apoi pentru fiecare pointer din tabloul alocat precedent îi asignăm adresa unui nou tablou cu dimensiunea i
pMatrice[i] = new int[i];
// și populăm tabloul cu valoarea k (pe care o și incrementăm după)
for (size_t j = 1; j <= i; ++j) pMatrice[i][j] = k++;
}
// și returnăm adresa
return pMatrice;
}
// funcția afișeză matricea triunghiulară
static void afisareMatrice(int** pMatrice, size_t numarLinii) {
for (size_t i = 1; i <= numarLinii; ++i) {
for (size_t j = 1; j <= i; ++j) cout << pMatrice[i][j] << " ";
cout << "\n";
}
}
// dealocă tablourile alocate dinamic
static void dealocareMatrice(int** pMatrice, size_t numarLinii) {
for (size_t i = 1; i <= numarLinii; ++i) delete[] pMatrice[i];
delete[] pMatrice;
pMatrice = nullptr;
}
int main() {
// citim din câte linii e formată matricea noastră
size_t cateLinii;
cout << "Introdu numarul de linii (de ex. 4) >> ";
cin >> cateLinii;
// și creăm matricea, o afișăm iar mai apoi o dealocăm
int** pMatrice = creareMatrice(cateLinii);
afisareMatrice(pMatrice, cateLinii);
dealocareMatrice(pMatrice, cateLinii);
return 0;
}