NickAndNick

Матрица. Выделение памяти. Заполнение. Вывод. Удаление

Jul 29th, 2014
508
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <random>
  3. #include <iomanip>
  4.  
  5. using namespace std;
  6.  
  7. int** create(size_t, size_t);
  8. void fill(int**, size_t, size_t);
  9. int randomize(int = 0, int = 99);
  10. void print(int**, size_t, size_t, streamsize = 3);
  11. void destroy(int**, size_t);
  12.  
  13. int main() {
  14.     system("chcp 1251 > nul");
  15.     cout << "Введите размерность матрицы: ";
  16.     size_t r, c;
  17.     cin >> r >> c;
  18.     int** matrix = nullptr;
  19.     if (matrix = create(r, c)) {
  20.         fill(matrix, r, c);
  21.         print(matrix, r, c);
  22.         destroy(matrix, r);
  23.         matrix = nullptr;
  24.     } else cout << "\a Недостаточно памяти!\n";
  25.     cin.sync();
  26.     cin.get();
  27. }
  28.  
  29. int** create(size_t rows, size_t cols) {
  30.     int** ptr = nullptr;
  31.     if (ptr = new (nothrow) int*[rows]) {
  32.         for (size_t row = 0; row < rows; ++row) {
  33.             if (ptr[row] = new (nothrow) int[cols]);
  34.             else {
  35.                 for (size_t r = 0; r < row; ++r) {
  36.                     delete[] ptr[r];
  37.                 }
  38.                 delete[] ptr;
  39.                 ptr = nullptr;
  40.                 break;
  41.             }
  42.         }
  43.     }
  44.     return ptr;
  45. }
  46.  
  47. void fill(int** matrix, size_t rows, size_t cols) {
  48.     for (size_t row = 0; row < rows; ++row) {
  49.         for (size_t col = 0; col < cols; ++col) {
  50.             matrix[row][col] = randomize();
  51.         }
  52.     }
  53. }
  54.  
  55. int randomize(int left, int right) {
  56.     if (left > right) swap(left, right);
  57.     uniform_int_distribution<int> rand(left, right);
  58.     random_device rnd;
  59.     return rand(rnd);
  60. }
  61.  
  62. void print(int** matrix, size_t rows, size_t cols, streamsize width) {
  63.     for (size_t row = 0; row < rows; ++row) {
  64.         for (size_t col = 0; col < cols; ++col) {
  65.             cout << setw(width) << matrix[row][col];
  66.         }
  67.         cout << '\n';
  68.     }
  69. }
  70.  
  71. void destroy(int** matrix, size_t rows) {
  72.     if (matrix) {
  73.         for (size_t row = 0; row < rows; ++row) {
  74.             if (matrix[row]) {
  75.                 delete[] matrix[row];
  76.             }
  77.         }
  78.         delete[] matrix;
  79.     }
  80. }
RAW Paste Data