Advertisement
35657

Untitled

May 4th, 2023
667
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.66 KB | None | 0 0
  1.  
  2.  
  3. //=========================================По транспонированию матрицы======================================================
  4.  
  5.  
  6. Транспонирование матрицы - когда строки и столбцы меняются местами, например:
  7.  
  8. исходный массив
  9.  
  10.  13  16  27  25  // первая строка
  11.  23  25  16  12  // вторая строка
  12.  9   1   2   7
  13.  
  14. результирующий массив
  15.  
  16.   13  23   9   // первая строка стала первым столбцом
  17.   16  25   1   // вторая строка стала вторым столбцом
  18.   27  16   2   // и т.д.
  19.   25  12   7
  20.  
  21. В функции транспонирования нужно обязательно создавать новый массив, так как количество строк и столбцов может меняться
  22.  
  23.  
  24. void tRans(int**& arr, int& lines, int& cols) { // все параметры должны приниматься по ссылкам так как будут меняться их значения
  25.     int** temp = new int* [cols];
  26.     for (int i = 0; i < cols; ++i) { // здесь вы правильно создали новый массив и правильно заменили количество его строк на количество столбцов исходного
  27.         temp[i] = new int[lines];
  28.         for (int j = 0; j < lines; j++) { // одновременно можно заполнить строки нового массива
  29.                                           // подумайте сами как именно заполнять, если совсем никак, то в самом конце подсказка
  30.         }
  31.     }
  32.     // далее не забываем удалить старый массив (включая вложенные массивы)
  33.     arr = temp; // а в указатель на старый записать указатель на новый
  34.     // ну и соответственно меняем значения lines и cols
  35. }
  36.  
  37.  
  38.  
  39. int main() {
  40.     int a = 3;
  41.     int b = 4;
  42.     int** pArr = new int*[a];
  43.     for (int i = 0; i < a; i++) {
  44.         pArr[i] = new int[b];
  45.     }
  46.  
  47.     for (int i = 0; i < a; i++) {
  48.         for (int j = 0; j < b; j++) {
  49.             pArr[i][j] = rand() % 30;
  50.             cout << setw(4) << pArr[i][j];
  51.         }
  52.         cout << endl;
  53.     }
  54.     cout << endl;
  55.    
  56.     tRans(pArr, a, b);
  57.    
  58.     for (int i = 0; i < a; i++) {
  59.         for (int j = 0; j < b; j++) {
  60.             cout << setw(4) << pArr[i][j]; // в main для наглядности выведите массив до и после
  61.         }
  62.         cout << endl;
  63.     }
  64.     cout << endl;
  65.  
  66.     for (int i = 0; i < a; i++) {
  67.     delete[]pArr[i];
  68.     }
  69.     delete[]pArr;
  70.  
  71. }
  72.  
  73.  
  74.  
  75. //=========================================По повороту на 90 градусов======================================================
  76.  
  77. Функция для поворота на 90 градусов полностью идентична описанной выше функции для транспонирования, отличие только в одной строке (как заполнять матрицу)
  78.  
  79.  
  80.  
  81. //===================================Подсказка на крайний случай=============================
  82.  
  83. temp[i][j] = arr[j][i]; // для транспонирования (разберитесь почему именно так)
  84.  
  85. temp[i][j] = arr[lines - j - 1][i]; // для поворота (разберитесь почему именно так)
  86.  
  87.  
  88.  
  89.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement