Назад
Зміст
Вперед
Перестановки рядків або стовпців зі зсувом
У цьому розділі наведені задачі, в яких із двовимірного масиву деякі рядки (стовпці) вилучаються зі свого місця (зі зсувом рядків або стовпців, які залишаються), а потім вставляються в інше місце цього ж масиву.
Приклад 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 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
|
- Переставте останній рядок на місце першого. При цьому перший, другий, ..., передостанній рядки зсуваються вниз.
| Ввід | Вивід |
1 1 1
2 2 2
3 3 3
4 4 4
|
4 4 4
1 1 1
2 2 2
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
|
- Дано двовимірний масив. Переставити 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
|
- Дано двовимірний масив. Переставити 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
|
- Дано двовимірний масив. Переставити 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
|
- Дано двовимірний масив. Переставити 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
|
- Дано двовимірний масив із 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 стовпців. Перенести перші 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
|
- Дано двовимірний квадратний масив. Складіть програму, яка змінює місцями всі елементи,
симетричні відносно головної діагоналі.
| Ввід | Вивід |
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
|
- Дано двовимірний квадратний масив. Складіть програму, яка змінює місцями всі елементи,
симетричні відносно побічної діагоналі.
| Ввід | Вивід |
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
|
- Дано двовимірний масив. Переставити 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
|
- Дано двовимірний масив. Переставити 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
|
- Дано двовимірний масив. Переставити 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
|
- Дано двовимірний масив із 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 стовпців. Перенести перші 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
|
Назад
Зміст
Вперед