Advertisement
Guest User

3D array

a guest
Jun 21st, 2021
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <random>
  3.  
  4. const int SIZE_ARR = 3;
  5.  
  6. // *** ONLY FOR SHOWING MEMORY ***
  7.  
  8. void printReservedMemory(char arr[SIZE_ARR][SIZE_ARR][SIZE_ARR]) {
  9.     std::cout << "\n";
  10.     std::cout << "---------------------------------------" << std::endl;
  11.     std::cout << " bot             | side                " << std::endl;
  12.     std::cout << "                 |                     " << std::endl;
  13.     std::cout << "     " << arr[0][0][0] << " " << arr[0][1][0] << " " << arr[0][2][0] << "       |     " << arr[2][2][2] << " " << arr[1][2][2] << " " << arr[0][2][2] << "           " << std::endl;
  14.     std::cout << "     " << arr[1][0][0] << " " << arr[1][1][0] << " " << arr[1][2][0] << "       |     " << arr[2][2][1] << " " << arr[1][2][1] << " " << arr[0][2][1] << "           " << std::endl;
  15.     std::cout << "     " << arr[2][0][0] << " " << arr[2][1][0] << " " << arr[2][2][0] << "       |     " << arr[2][2][0] << " " << arr[1][2][0] << " " << arr[0][2][0] << "           " << std::endl;
  16.     std::cout << "                 |                     " << std::endl;
  17.     std::cout << "---------------------------------------" << std::endl;
  18.     std::cout << " front           |3D    " << arr[0][0][2] << "              " << std::endl;
  19.     std::cout << "                 |    " << arr[1][0][2] << " " << arr[0][0][1] << "     " << arr[0][1][2] << "        " << std::endl;
  20.     std::cout << "     " << arr[2][0][2] << " " << arr[2][1][2] << " " << arr[2][2][2] << "       |  " << arr[2][0][2] << " " << arr[1][0][1] << " " << arr[0][0][0] << "   " << arr[1][1][2] << " " << arr[0][1][1] << "     " << arr[0][2][2] << "  " << std::endl;
  21.     std::cout << "     " << arr[2][0][1] << " " << arr[2][1][1] << " " << arr[2][2][1] << "       |  " << arr[2][0][1] << " " << arr[1][0][0] << "   " << arr[2][1][2] << " " << arr[1][1][1] << " " << arr[0][1][0] << "   " << arr[1][2][2] << " " << arr[0][2][1] << " " << std::endl;
  22.     std::cout << "     " << arr[2][0][0] << " " << arr[2][1][0] << " " << arr[2][2][0] << "       |  " << arr[2][0][0] << "     " << arr[2][1][1] << " " << arr[1][1][0] << "   " << arr[2][2][2] << " " << arr[1][2][1] << " " << arr[0][2][0] << "  " << std::endl;
  23.     std::cout << "                 |        " << arr[2][1][0] << "     " << arr[2][2][1] << " " << arr[1][2][0] << "    " << std::endl;
  24.     std::cout << "                 |              " << arr[2][2][0] << "    " << std::endl;
  25.     std::cout << "---------------------------------------" << std::endl;
  26. }
  27.  
  28. void stepsOfReservedMemory() {
  29.     char arr[SIZE_ARR][SIZE_ARR][SIZE_ARR]{
  30.         {{'.','.','.'}, {'.','.','.'}, {'.','.','.'}},
  31.         {{'.','.','.'}, {'.','.','.'}, {'.','.','.'}},
  32.         {{'.','.','.'}, {'.','.','.'}, {'.','.','.'}},
  33.     };
  34.     std::cout << "\nVisualization of empty 3D matrix:";
  35.     printReservedMemory(arr);
  36.     std::cout << "\nReserved memory for 3 x 2D pointers: int*** arr3D = new int** [SIZE_ARR] {};";
  37.     for (int i = 0; i < SIZE_ARR; ++i) {
  38.         arr[i][0][0] = 'R';
  39.     }
  40.     printReservedMemory(arr);
  41.     std::cout << "\nIn each 2D pointers reserved memory for 3 x 1D pointers: arr3D[i] = new int* [SIZE_ARR] {};";
  42.     for (int i = 0; i < SIZE_ARR; ++i) {
  43.         for (int j = 0; j < SIZE_ARR; ++j) {
  44.             arr[i][j][0] = 'R';
  45.         }
  46.     }
  47.     printReservedMemory(arr);
  48.     std::cout << "\nIn each 1D pointers reserved memory for 3 x int pointers: arr3D[i][j] = new int[SIZE_ARR] {};";
  49.     for (int i = 0; i < SIZE_ARR; ++i) {
  50.         for (int j = 0; j < SIZE_ARR; ++j) {
  51.             for (int k = 0; k < SIZE_ARR; ++k) {
  52.                 arr[i][j][k] = 'R';
  53.             }
  54.         }
  55.     }
  56.     printReservedMemory(arr);
  57. }
  58.  
  59. // *** THE CODE ***
  60.  
  61. int*** createMatrix() {
  62.  
  63.     std::mt19937 gen(time(0));
  64.     std::uniform_int_distribution<int> randomNum(0, 9);
  65.  
  66.     int*** arr3D = new int** [SIZE_ARR] {}; // for 3 pointers -> 2D
  67.     for (int i = 0; i < SIZE_ARR; ++i) {
  68.        
  69.         arr3D[i] = new int* [SIZE_ARR] {};  // for 3 x 3 pointers -> 1D
  70.         for (int j = 0; j < SIZE_ARR; ++j) {
  71.  
  72.             arr3D[i][j] = new int[SIZE_ARR] {}; // for each 1D pointer
  73.             for (int k = 0; k < SIZE_ARR; ++k) {
  74.                 arr3D[i][j][k] = randomNum(gen);
  75.             }
  76.         }
  77.     }
  78.     return arr3D;
  79. }
  80.  
  81. void releaseMemory(int***& arr3D) {
  82.     for (int i = 0; i < SIZE_ARR; ++i) {
  83.         for (int j = 0; j < SIZE_ARR; ++j) {
  84.             delete[] arr3D[i][j]; // delete 1D arrays
  85.             arr3D[i][j] = nullptr;
  86.         }
  87.         delete[] arr3D[i]; // delete 3 x 2D array
  88.         arr3D[i] = nullptr;
  89.     }
  90.     delete[] arr3D; // delete the 3D array
  91.     arr3D = nullptr;
  92. }
  93.  
  94. int sumOfMatrix3d(int***& arr3D) {
  95.     int sum = 0;
  96.     for (int i = 0; i < SIZE_ARR; ++i) {
  97.         for (int j = 0; j < SIZE_ARR; ++j) {
  98.             for (int k = 0; k < SIZE_ARR; ++k) {
  99.                 sum += arr3D[i][j][k];
  100.             }
  101.         }
  102.     }
  103.     return sum;
  104. }
  105.  
  106. void printVisualization(int***& arr) {
  107.     std::cout << "\nThe 3D matrix:" << std::endl;
  108.     std::cout << "---------------------------------------" << std::endl;
  109.     std::cout << " bot             | side                " << std::endl;
  110.     std::cout << "                 |                     " << std::endl;
  111.     std::cout << "     " << arr[0][0][0] << " " << arr[0][1][0] << " " << arr[0][2][0] << "       |     " << arr[2][2][2] << " " << arr[1][2][2] << " " << arr[0][2][2] << "           " << std::endl;
  112.     std::cout << "     " << arr[1][0][0] << " " << arr[1][1][0] << " " << arr[1][2][0] << "       |     " << arr[2][2][1] << " " << arr[1][2][1] << " " << arr[0][2][1] << "           " << std::endl;
  113.     std::cout << "     " << arr[2][0][0] << " " << arr[2][1][0] << " " << arr[2][2][0] << "       |     " << arr[2][2][0] << " " << arr[1][2][0] << " " << arr[0][2][0] << "           " << std::endl;
  114.     std::cout << "                 |                     " << std::endl;
  115.     std::cout << "---------------------------------------" << std::endl;
  116.     std::cout << " front           |3D    " << arr[0][0][2] << "              " << std::endl;
  117.         std::cout << "                 |    " << arr[1][0][2] << " " << arr[0][0][1] << "     " << arr[0][1][2] << "        " << std::endl;
  118.     std::cout << "     " << arr[2][0][2] << " " << arr[2][1][2] << " " << arr[2][2][2] << "       |  " << arr[2][0][2] << " " << arr[1][0][1] << " " << arr[0][0][0] << "   " << arr[1][1][2] << " " << arr[0][1][1] << "     " << arr[0][2][2] << "  " << std::endl;
  119.     std::cout << "     " << arr[2][0][1] << " " << arr[2][1][1] << " " << arr[2][2][1] << "       |  " << arr[2][0][1] << " " << arr[1][0][0] << "   " << arr[2][1][2] << " " << arr[1][1][1] << " " << arr[0][1][0] << "   " << arr[1][2][2] << " " << arr[0][2][1] << " " << std::endl;
  120.     std::cout << "     " << arr[2][0][0] << " " << arr[2][1][0] << " " << arr[2][2][0] << "       |  " << arr[2][0][0] << "     " << arr[2][1][1] << " " << arr[1][1][0] << "   " << arr[2][2][2] << " " << arr[1][2][1] << " " << arr[0][2][0] << "  " << std::endl;
  121.     std::cout << "                 |        " << arr[2][1][0] << "     " << arr[2][2][1] << " " << arr[1][2][0] << "    " << std::endl;
  122.     std::cout << "                 |              " << arr[2][2][0] << "    " << std::endl;
  123.     std::cout << "---------------------------------------" << std::endl;
  124. }
  125.  
  126.  
  127. int main()
  128. {
  129.     // only for showing memory
  130.     stepsOfReservedMemory();
  131.  
  132.     // the code
  133.     int*** arr3D = createMatrix();
  134.  
  135.     printVisualization(arr3D);
  136.  
  137.     std::cout << "Sum of the elements: " << sumOfMatrix3d(arr3D) << std::endl;
  138.  
  139.     releaseMemory(arr3D);
  140.  
  141.     return 0;
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement