Pesterevaev

pesterevaev_week17_task1_3

Feb 24th, 2020
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.83 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <random>
  4. #include <ctime>
  5.  
  6. using namespace std;
  7.  
  8. void printArray(int** array, int row, int col) {
  9.     for (int i = 0; i < row; ++i) {
  10.         for (int j = 0; j < col; ++j) {
  11.             cout << setw(3) << array[i][j] << " ";
  12.         }
  13.         cout << endl;
  14.     }
  15.     cout << endl;
  16. }
  17.  
  18. void shiftUp(int** array, int** array2, int row, int col, int num) {
  19.     if (num > row)
  20.         num = num % row;   
  21.     for (int i = 0; i < row; ++i) {    
  22.         for (int j = 0; j < col; ++j) {
  23.             if (i + num < row)
  24.                 array2[i][j] = array[i + num][j];
  25.             else
  26.                 array2[i][j] = array[(num + i) - row][j];
  27.         }
  28.     }  
  29. }
  30.  
  31. void shiftDown(int** array, int** array2, int row, int col, int num) {
  32.     if (num > row)
  33.         num = num % row;   
  34.     for (int i = 0; i < row; ++i) {
  35.         for (int j = 0; j < col; ++j) {
  36.             if (i - num >= 0)
  37.                 array2[i][j] = array[i - num][j];
  38.             else
  39.                 array2[i][j] = array[row - (num - i)][j];
  40.         }
  41.     }  
  42. }
  43.  
  44. void shiftRight(int** array, int** array2, int row, int col, int num) {
  45.     if (num > col)
  46.         num = num % col;   
  47.     for (int i = 0; i < row; ++i) {
  48.         for (int j = 0; j < col; ++j) {
  49.             if (j - num >= 0)
  50.                 array2[i][j] = array[i][j - num];
  51.             else
  52.                 array2[i][j] = array[i][col - (num - j)];
  53.         }
  54.     }  
  55. }
  56.  
  57. void shiftLeft(int** array, int** array2, int row, int col, int num) {
  58.     if (num > col)
  59.         num = num % col;
  60.     for (int i = 0; i < row; ++i) {    
  61.         for (int j = 0; j < col; ++j) {
  62.             if(j + num < col)
  63.                 array2[i][j] = array[i][j + num];
  64.             else
  65.                 array2[i][j] = array[i][(num + j) - col];
  66.         }
  67.     }  
  68. }
  69.  
  70. int** shift(int** array, int row, int col, int num, int dir) {
  71.     int** array2 = new int* [row];
  72.     for (int i = 0; i < row; ++i) {
  73.         array2[i] = new int[col];
  74.     }
  75.     switch (dir) {
  76.     case 1: shiftRight(array, array2, row, col, num); break;
  77.     case 2: shiftLeft(array, array2, row, col, num); break;
  78.     case 3: shiftUp(array, array2, row, col, num); break;
  79.     case 4: shiftDown(array, array2, row, col, num); break;
  80.     }
  81.     return array2;
  82. }
  83.  
  84. int main(){
  85.  
  86.     random_device rand;
  87.     mt19937 gen(time(NULL));
  88.     uniform_int_distribution<> result(0, 100);
  89.     const int row = 5;
  90.     const int col = 6;
  91.     int** array = new int* [row];
  92.     for (int i = 0; i < row; ++i) {
  93.         array[i] = new int[col];
  94.         for (int j = 0; j < col; ++j) {
  95.             array[i][j] = result(gen);
  96.         }
  97.     }
  98.     printArray(array, row, col);
  99.     cout << "Enter the number of shifts: ";
  100.     int shifts;
  101.     cin >> shifts;
  102.     cout << "Enter the direction: \n";
  103.     cout << "1 - right;\n" << "2 - left;\n" << "3 - up;\n" << "4 - down.\n";
  104.     int dir;
  105.     cin >> dir;
  106.     if (dir < 1 || dir > 4) {
  107.         cout << "Incorrect input!";
  108.         return 1;
  109.     }  
  110.     int** array2 = shift(array, row, col, shifts, dir);
  111.     printArray(array2, row, col);
  112.     for (int i = 0; i < row; ++i) {
  113.         delete[] array[i];
  114.     }
  115.     delete[] array;
  116.     for (int i = 0; i < row; ++i) {
  117.         delete[] array2[i];
  118.     }
  119.     delete[] array2;
  120.     return 0;
  121. }
Add Comment
Please, Sign In to add comment