tranerius

16. 15 + транспонир. и перевод двумер. в одномер. массив

Dec 12th, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.88 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3. #define BUG_1 0
  4. int sumArrVals(int* oneDimArr, const int size);
  5. int sumArrVals(int** twoDimArr, const int rows, const int cols);
  6. void FillArr(int** twoDimArr, const int rows, const int cols) {
  7.     for (int i = 0; i < rows; i++) {
  8.         for (int j = 0; j < cols; j++) {
  9.             twoDimArr[i][j] = 1 + rand() % (cols*rows);
  10.         }
  11.     }
  12.     for (int i = 0; i < rows; i++) {
  13.         for (int j = 0; j < cols; j++) {
  14.             for (int m = 0; m < rows; m++) {
  15.                 for (int l = 0; l < cols; l++) {
  16.                     if (j == l && i == m) {
  17.                         continue;
  18.                     }
  19.                     if (twoDimArr[i][j] == twoDimArr[m][l]) {
  20.                         twoDimArr[i][j] = 1 + rand() % (cols*rows);
  21.                         m = -1;
  22.                         break;
  23.                     }
  24.                 }
  25.             }
  26.         }
  27.     }
  28. }
  29. void shawArr(int* oneDimArr, const int size) {
  30.     for (int i = 0; i < size; i++) {
  31.         std::cout << oneDimArr[i] << "\t";
  32.     }
  33.     #if BUG_1==1
  34.         std::cout << "\nСумма " << size << " элементов массива равна " << sumArrVals(oneDimArr, size) << std::endl;
  35.     #endif
  36. }
  37. void shawArr(int** twoDimArr, const int rows, const int cols) {
  38.     for (int i = 0; i < rows; i++) {
  39.         for (int j = 0; j < cols; j++) {
  40.             std::cout << twoDimArr[i][j] << "\t";
  41.         }
  42.         std::cout << std::endl;
  43.     }
  44.     #if BUG_1==1
  45.         std::cout << "Сумма элементов массива " << rows << " x " << cols << " равна " << sumArrVals(twoDimArr, rows, cols) << std::endl;
  46.     #endif
  47. }
  48. void ArrTranspose(int**& twoDimArr, const int rows, const int cols) {
  49.     int **transArr = new int*[cols];
  50.     for (int i = 0; i < cols; i++) {
  51.         transArr[i] = new int[rows];
  52.     }
  53.     for (int i = 0; i < cols; i++) {
  54.         for (int j = 0; j < rows; j++) {
  55.             transArr[i][j] = twoDimArr[j][i];
  56.         }
  57.     }
  58.     for (int i = 0; i < rows; i++) {
  59.         delete[] twoDimArr[i];
  60.     }
  61.     delete[]twoDimArr;
  62.     twoDimArr = transArr;
  63. }
  64. void D2toD1(int** twoDimArr, int* oneDimArr, const int rows, const int cols) {
  65.     int m = 0;
  66.     for (int i = 0; i < rows; i++) {
  67.         for (int j = 0; j < cols; j++) {
  68.             while (true) {
  69.                 oneDimArr[m] = twoDimArr[i][j];
  70.                 m++;
  71.                 break;
  72.             }
  73.         }
  74.     }
  75. }
  76. void swap(int &a, int &b) {
  77.     int temp = a;
  78.     a = b;
  79.     b = temp;
  80. }
  81. int main() {
  82.     srand(time(NULL));
  83.     setlocale(LC_ALL, "ru");
  84.     int rows, cols; char answer;
  85.     std::cout << "Введите количество строк массива ";
  86.     std::cin >> rows;
  87.     std::cout << "Введите количество столбов массива ";
  88.     std::cin >> cols;
  89.     int *ArrD1 = new int[cols * rows];
  90.     int **ArrD2 = new int*[rows];
  91.     for (int i = 0; i < rows; i++) {
  92.         ArrD2[i] = new int[cols];
  93.     }
  94.     FillArr(ArrD2, rows, cols);
  95.     shawArr(ArrD2, rows, cols);
  96.     while (true) {
  97.         std::cout << "Транспонировать массив?(y/n) ";
  98.         std::cin >> answer;
  99.         if (answer != 'y' && answer != 'n') {
  100.             std::cout << "Вы не ответили на вопрос" << std::endl;
  101.             continue;
  102.         }
  103.         else if (answer == 'n') {
  104.             break;
  105.         }
  106.         ArrTranspose(ArrD2, rows, cols);
  107.         swap(rows, cols);
  108.         shawArr(ArrD2, rows, cols);
  109.     }
  110.     while (true) {
  111.         std::cout << "Перевести двумерный массив в одномерный?(y/n)";
  112.         std::cin >> answer;
  113.         if (answer != 'y' && answer != 'n') {
  114.             std::cout << "Вы не ответили на вопрос" << std::endl;
  115.             continue;
  116.         }
  117.         else if (answer == 'n') {
  118.             break;
  119.         }
  120.         else if (answer == 'y') {
  121.             D2toD1(ArrD2, ArrD1, rows, cols);
  122.             shawArr(ArrD1, (rows*cols));
  123.             break;
  124.         }
  125.     }
  126.     for (int i = 0; i < rows; i++) {
  127.         delete[] ArrD2[i];
  128.     }
  129.     delete[] ArrD2;
  130.     delete[] ArrD1;
  131.     ArrD2 = nullptr;
  132.     ArrD1 = nullptr;
  133. }
  134. int sumArrVals(int* oneDimArr, const int size) {
  135.     int val = 0;
  136.     for (int i = 0; i < size; i++) {
  137.         val = val + oneDimArr[i];
  138.     }
  139.     return val;
  140. }
  141. int sumArrVals(int** twoDimArr, const int rows, const int cols) {
  142.     int val = 0;
  143.     for (int i = 0; i < rows; i++) {
  144.         for (int j = 0; j < cols; j++) {
  145.             val = val + twoDimArr[i][j];
  146.         }
  147.     }
  148.     return val;
  149. }
Advertisement
Add Comment
Please, Sign In to add comment