Назад Зміст Вперед


Перестановки рядків або стовпців зі зсувом

У цьому розділі наведені задачі, в яких із двовимірного масиву деякі рядки (стовпці) вилучаються зі свого місця (зі зсувом рядків або стовпців, які залишаються), а потім вставляються в інше місце цього ж масиву.

Приклад 1

Дано двовимірний цілочисельний масив. Переставте перший стовпець на місце останнього. При цьому другий, третій ..., останній стовпці зсунуться вліво.

Результат роботи програми

Програма

/*******************************
 Дано двовимірний цілочисельний масив. Переставте перший стовпець на місце останнього.
 При цьому другий, третій ... останні стовпці зсуваються вліво. Циклічний зсув
*******************************/
#include <iostream>
#include <ctime>
using namespace std;

const int maxM = 10;
const int maxN = 10;

void printMatrix(auto, int, int);
void randomizeMatrix(auto p, int, int, int, int);
void ShiftCol(auto p, int, int);

int main() {
    srand(time(0));  // Виправлено stand на srand
    int arr[maxM][maxN];
    int M = 5, N = 5;  // Розміри за замовчуванням
    
    cout << "Введіть розміри матриці: " << endl;
    cin >> M >> N;
    
    int minRand = 0, maxRand = 9;
    cout << "Введіть діапазон значень елементів матриці: " << endl;
    cin >> minRand >> maxRand;
    
    randomizeMatrix(arr, M, N, minRand, maxRand);
    printMatrix(arr, M, N);
    cout << endl;
    
    ShiftCol(arr, M, N);  // Виконання циклічного зсуву
    printMatrix(arr, M, N);
    
    return 0;
}
// Функція для виведення матриці
void printMatrix(auto p, int M, int N) {
    for (int i = 0; i < M; i++) {
        for (int j = 0; j < N; j++) {
            cout << p[i][j] << "\t";
        }
        cout << endl;
    }
}

// Функція для заповнення матриці випадковими значеннями
void randomizeMatrix(auto p, int M, int N, int minRand, int maxRand) {
    for (int i = 0; i < M; i++) {
        for (int j = 0; j < N; j++) {
            p[i][j] = minRand + rand() % (maxRand - minRand + 1);
        }
    }
}

// Функція для циклічного зсуву стовпців матриці вліво
void ShiftCol(auto p, int M, int N) {
    int x[M];  // Виправлено розмір масиву (N на M)
    
    // Зберігаємо перший стовпець
    for (int i = 0; i < M; i++) {
        x[i] = p[i][0];
    }
    
    // Зсуваємо стовпці вліво
    for (int j = 1; j < N; j++) {
        for (int i = 0; i < M; i++) {
            p[i][j-1] = p[i][j];
        }
    }
    
    // Переносимо перший стовпець в кінець
    for (int i = 0; i < M; i++) {
        p[i][N-1] = x[i];
    }
}

Варіанти задач

  1. Переставте останній стовпець на місце першого. При цьому перший, другий, ..., передостанній стовпці зсуваються вправо.
    Ввід Вивід
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 5 4
    
    5 1 3 4 2
    5 1 3 4 2
    5 1 3 4 2
    
  2. Переставте останній рядок на місце першого. При цьому перший, другий, ..., передостанній рядки зсуваються вниз.
    Ввід Вивід
    1 1 1
    2 2 2
    3 3 3
    4 4 4
    
    4 4 4
    1 1 1
    2 2 2
    3 3 3
    
  3. Переставте перший рядок на місце останнього. При цьому, другий, ..., передостанній рядки зсуваються вгору.
    Ввід Вивід
    1 1 1
    2 2 2
    3 3 3
    4 4 4
    
    2 2 2
    3 3 3
    4 4 4
    1 1 1
    
  4. Дано двовимірний масив. Переставити s-й рядок на місце k-го (s<k). При цьому (s + 1) -й, (s + 2) -й, ..., K-й рядки підняти.
    Ввід Вивід
    1 1 1
    2 2 2
    3 3 3
    4 4 4
    S = 2
    K = 4
    
    1 1 1
    3 3 3
    4 4 4
    2 2 2 
    
  5. Дано двовимірний масив. Переставити a-й стовпець на місце b-го (a <b). При цьому (a + 1) -й, (a + 2) -й, ..., b-й стовпці зсуваються вліво.
    Ввід Вивід
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    a = 2
    b = 4
    
    1 3 4 2 5
    1 3 4 2 5
    1 3 4 2 5
    
  6. Дано двовимірний масив. Переставити s-й рядок на місце k-го (s>k). При цьому k-й, (k + 1) -й, ..., (s-1) -й рядки зсуваються вниз.
    Ввід Вивід
    1 1 1
    2 2 2
    3 3 3
    4 4 4
    S = 4
    K = 2
    
    1 1 1
    4 4 4
    2 2 2
    3 3 3
    
  7. Дано двовимірний масив. Переставити a-й стовпець на місце b-го (a>b). При цьому b-й, (b + 1) -й, ..., (a-1) -й стовпці зсуваються вправо.
    Ввід Вивід
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    a = 4
    b = 2
    
    1 4 2 3 5
    1 4 2 3 5
    1 4 2 3 5
    
  8. Дано двовимірний масив із 9 рядків. Перенести перші 3 рядки в кінець масиву, зберігаючи порядок їх слідування.
    Ввід Вивід
    1 1 1
    2 2 2
    3 3 3
    4 4 4
    5 5 5
    6 6 6
    7 7 7
    8 8 8
    9 9 9
    
    4 4 4
    5 5 5
    6 6 6
    7 7 7
    8 8 8
    9 9 9
    1 1 1
    2 2 2
    3 3 3
    
  9. Дано двовимірний масив із 9 стовпців. Перенести перші 3 стовпці в кінець масиву, зберігаючи порядок їх слідування.
    Ввід Вивід
    1 2 3 4 5 6 7 8 9
    1 2 3 4 5 6 7 8 9
    1 2 3 4 5 6 7 8 9
    
    4 5 6 7 8 9 1 2 3
    4 5 6 7 8 9 1 2 3
    4 5 6 7 8 9 1 2 3
    
  10. Дано двовимірний квадратний масив. Складіть програму, яка змінює місцями всі елементи, симетричні відносно головної діагоналі.
    Ввід Вивід
    1 2 3 4
    1 2 3 4
    1 2 3 4
    1 2 3 4
    
    1 1 1 1
    2 2 2 2
    3 3 3 3
    4 4 4 4
    
  11. Дано двовимірний квадратний масив. Складіть програму, яка змінює місцями всі елементи, симетричні відносно побічної діагоналі.
    ВвідВивід
    1 2 3 4 
    1 2 3 4 
    1 2 3 4 
    1 2 3 4 
    
    4 4 4 4
    3 3 3 3 
    2 2 2 2 
    1 1 1 1
    
  12. Дано двовимірний масив. Переставити a-й стовпець на місце b-го (a <b). При цьому (a + 1) -й, (a + 2) -й, ..., b-й стовпці зсуваються вліво.
    Ввід Вивід
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    a = 2
    b = 4
    
    1 3 4 2 5
    1 3 4 2 5
    1 3 4 2 5
    
  13. Дано двовимірний масив. Переставити s-й рядок на місце k-го (s>k). При цьому k-й, (k + 1) -й, ..., (s-1) -й рядки зсуваються вниз.
    Ввід Вивід
    1 1 1
    2 2 2
    3 3 3
    4 4 4
    S = 4
    K = 2
    
    1 1 1
    4 4 4
    2 2 2
    3 3 3
    
  14. Дано двовимірний масив. Переставити a-й стовпець на місце b-го (a>b). При цьому b-й, (b + 1) -й, ..., (a-1) -й стовпці зсуваються вправо.
    Ввід Вивід
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    a = 4
    b = 2
    
    1 4 2 3 5
    1 4 2 3 5
    1 4 2 3 5
    
  15. Дано двовимірний масив із 9 рядків. Перенести перші 3 рядки в кінець масиву, зберігаючи порядок їх слідування.
    Ввід Вивід
    1 1 1
    2 2 2
    3 3 3
    4 4 4
    5 5 5
    6 6 6
    7 7 7
    8 8 8
    9 9 9
    
    4 4 4
    5 5 5
    6 6 6
    7 7 7
    8 8 8
    9 9 9
    1 1 1
    2 2 2
    3 3 3
    
  16. Дано двовимірний масив із 9 стовпців. Перенести перші 3 стовпці в кінець масиву, зберігаючи порядок їх слідування.
    Ввід Вивід
    1 2 3 4 5 6 7 8 9
    1 2 3 4 5 6 7 8 9
    1 2 3 4 5 6 7 8 9
    
    4 5 6 7 8 9 1 2 3
    4 5 6 7 8 9 1 2 3
    4 5 6 7 8 9 1 2 3
    


Назад Зміст Вперед