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

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 de Apollyon
1

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;

}

Alte întrebări interesante