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


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

Видалення одного рядка

Під видаленням k-го рядка з двовимірного масиву потрібно розуміти:

  1. Видалення цього рядка з масиву шляхом зміщення всіх наступних рядків на одиницю вгору.
  2. Присвоєння всім елементам останнього рядка значення 0.

Для цього в кожному стовпці видаляється k-й елемент шляхом зміщення всіх наступних елементів вгору на одну позицію. Тобто зовнішній цикл буде по стовпцях (другому індексу), а внутрішній цикл (по першому індексу) буде зміщувати вгору всі елементи, починаючи з (k + 1)-го.

Видалення одного стовпця

Під видаленням k-го стовпця з двовимірного масиву потрібно розуміти:

  1. Видалення цього стовпця з масиву шляхом зміщення наступних стовпців на одиницю вліво;
  2. Присвоєння всім елементам останнього стовпця значення 0.

Для цього в кожному рядку видаляється k-й елемент шляхом зміщення всіх наступних елементів вліво на одну позицію. Тобто зовнішній цикл буде по рядках (по першому індексу), а внутрішній цикл (по другому індексу) буде зміщувати вліво всі елементи, починаючи з (k + 1)-го.

Приклад 1

Дано двовимірний масив цілих чисел. Видалити з нього рядок з номером rowToDelete і стовпець з номером colToDelete.

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

Програма

#include <iostream>
#include <ctime>
using namespace std;

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

void printMatrix(auto, int, int);
void randomizeMatrix(auto, int, int, int, int);
void deleteRow(auto, int, int&, int&);
void deleteCol(auto, int, int&, int&);

int main() {
    srand(time(0));
    int arr[maxM][maxN];
    int M = 5, N = 5;  // Розміри за замовчуванням
    
    cout << "Введіть розміри матриці: " << endl;
    cin >> M >> N;
    
    int minRand = 0, maxRand = 9;
    cout << "Введіть діапазон значень елементів матриці: " << endl;
    cin >> minRand >> maxRand;
    
    int rowToDelete = 0;
    int colToDelete = 0;
    cout << "Введіть номер рядка для видалення: " << endl;
    cin >> rowToDelete;
    cout << "Введіть номер стовпця для видалення: " << endl;
    cin >> colToDelete;
    
    randomizeMatrix(arr, M, N, minRand, maxRand);
    printMatrix(arr, M, N);
    cout << endl;
    
    cout << "Видалення рядка " << rowToDelete << endl;
    deleteRow(arr, rowToDelete, M, N);
    printMatrix(arr, M, N);
    
    cout << "Видалення стовпця " << colToDelete << endl;
    deleteCol(arr, colToDelete, 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 deleteRow(auto arr, int rowToDelete, int &M, int &N) {
    // Зсув рядків вгору
    for (int j = 0; j < N; j++) {
        for (int i = rowToDelete; i < M - 1; i++) {
            arr[i][j] = arr[i + 1][j];
        }
    }
    M--;  // Зменшення кількості рядків
}

// Функція для видалення стовпця
void deleteCol(auto arr, int colToDelete, int &M, int &N) {
    // Зсув стовпців вліво
    for (int i = 0; i < M; i++) {
        for (int j = colToDelete; j < N - 1; j++) {
            arr[i][j] = arr[i][j + 1];
        }
    }
    N--;  // Зменшення кількості стовпців
}

// Функція для заповнення матриці випадковими значеннями
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);  // Виправлено random() на rand()
        }
    }
}

Видалення кількох рядків

Якщо з масиву видаляються два рядки, то спочатку потрібно видалити рядок з більшим номером, а потім — з меншим.

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

Функції ті самі, змінилася головна.

Приклад 2

Дано двовимірний цілий масив. Видалити з нього всі рядки з парними номерами.

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

або

Програма

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

const int maxM = 100;
const int maxN = 100;

void printMatrix(auto, int, int);  // Виведення масиву на екран
void randomizeMatrix(auto, int, int, int, int);  // Заповнення масиву випадковими числами
void deleteRow(auto, int, int&, int&);  // Видалення k-го рядка матриці

int main() {
    srand(time(0));
    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;
    
    // Видалення рядків з парними номерами (з кінця до початку)
    for (int i = M - 1; i >= 0; i--) {
        if (i % 2 == 1) {  // Нумерація рядків з 0, тому парні індекси - це непарні номери
            deleteRow(arr, i, M, N);
        }
    }
    
    cout << endl << "Змінений масив:" << endl;
    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 deleteRow(auto arr, int rowToDelete, int &M, int &N) {
    // Зсув елементів вгору для видалення рядка
    for (int j = 0; j < N; j++) {
        for (int i = rowToDelete; i < M - 1; i++) {
            arr[i][j] = arr[i + 1][j];  // Копіювання елементів з нижчого рядка
        }
    }
    M--;  // Зменшення кількості рядків
}

// Функція для заповнення матриці випадковими значеннями
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);  // Виправлено random() на rand()
        }
    }
}

Видалення кількох стовпців

Якщо з масиву видаляються два стовпці, то спочатку потрібно видалити стовпець з більшим номером, а потім — з меншим.

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

Функції ті самі, змінилася головна.

Приклад 3

Дано двовимірний масив цілих чисел. Видалити з нього всі стовпці з парними номерами.

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

Програма

/***********
 Дано двовимірний цілочисельний масив. Видалити з нього всі стовпці з непарними номерами.
***********/
#include <iostream>
#include <ctime>
using namespace std;

const int maxM = 100;
const int maxN = 100;

void printMatrix(auto, int, int);  // Виведення масиву на екран
void randomizeMatrix(auto, int, int, int, int);  // Заповнення масиву випадковими числами
void deleteCol(auto, int, int&, int&);  // Видалення стовпця

int main() {
    srand(time(0));
    int arr[maxM][maxN];
    int M = 5, N = 5;  // Початкові розміри матриці
    
    cout << "Введіть розміри матриці (M N): " << 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;
    
    // Видалення стовпців з непарними номерами (з кінця до початку)
    for (int j = N - 1; j >= 0; j--) {
        if (j % 2 != 0) {  // Перевірка на непарність (індекси з 0)
            deleteCol(arr, j, M, N);
        }
    }
    
    cout << endl << "Змінений масив:" << endl;
    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 deleteCol(auto arr, int colToDelete, int &M, int &N) {
    // Зсув елементів вліво для видалення стовпця
    for (int i = 0; i < M; i++) {
        for (int j = colToDelete; j < N - 1; j++) {
            arr[i][j] = arr[i][j + 1];
        }
    }
    N--;  // Зменшення кількості стовпців
}

// Функція для заповнення матриці випадковими значеннями
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);  
        }
    }
}

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

Варіант 1

  1. Дано двовимірний масив. Видалити з нього рядок, у якому знаходиться перше парне число.
  2. Дано двовимірний масив. Видалити з нього два стовпці, один з номером k1, а другий — з номером k2 (k1 < k2).

Варіант 2

  1. Дано двовимірний масив. Видалити з нього стовпець, у якому знаходиться останнє непарне число.
  2. Дано двовимірний масив. Видалити з нього два рядки: один з номером s1, а другий — з номером s2 (s1 < s2).

Варіант 3

  1. Дано двовимірний масив. Видалити з нього рядок, у якому знаходиться перший з мінімальних елементів.
  2. Дано двовимірний масив. Видалити з нього всі стовпці з другого по п’ятий.

Варіант 4

  1. Дано двовимірний масив. Видалити з нього стовпець, у якому знаходиться останній з максимальних елементів.
  2. Дано двовимірний масив. Видалити з нього всі рядки з третього по шостий.

Варіант 5

  1. Дано двовимірний масив. Видалити з нього перший рядок, сума елементів якого більша за задане число.
  2. Дано двовимірний масив. Видалити з нього всі стовпці, номери яких кратні 2.

Варіант 6

  1. Дано двовимірний масив. Видалити з нього останній зі стовпців, у якому є нулі.
  2. Дано двовимірний масив. Видалити з нього всі рядки, у яких кількість парних елементів більша за задане число.

Варіант 7

  1. Дано двовимірний масив. Видалити з нього останній рядок, у якому всі елементи додатні.
  2. Дано двовимірний масив. Видалити з нього всі стовпці, у яких є від’ємні елементи.

Варіант 8

  1. Дано двовимірний масив. Видалити з нього перший стовпець, у якому є парні числа.
  2. Дано двовимірний масив. Видалити з нього всі рядки, в яких усі елементи не кратні 3.

Варіант 9

  1. Дано двовимірний масив. Видалити з нього перший рядок, у якому сума елементів додатна.
  2. Дано двовимірний масив. Видалити з нього всі стовпці з k1-го по k2-й.

Варіант 10

  1. Дано двовимірний масив. Видалити з нього останній стовпець, у якому кількість додатних елементів дорівнює заданому числу.
  2. Дано двовимірний масив. Видалити з нього всі рядки з k1-го по k2-й номери.

Варіант 11

  1. Дано двовимірний масив. Видалити з нього останній рядок, у якому сума елементів найменша.
  2. Дано двовимірний масив. Видалити з нього всі стовпці, номери яких кратні 3.

Варіант 12

  1. Дано двовимірний масив. Видалити з нього останній стовпець, у якому сума елементів найбільша.
  2. Дано двовимірний масив. Видалити з нього всі рядки, у яких кількість непарних елементів дорівнює заданому числу.

Варіант 13

  1. Дано двовимірний масив. Видалити з нього перший рядок, у якому сума елементів найбільша.
  2. Дано двовимірний масив. Видалити з нього всі стовпці, у яких сума елементів більша за задане число.

Варіант 14

  1. Дано двовимірний масив. Видалити з нього перший стовпець, у якому сума елементів найменша.
  2. Дано двовимірний масив. Видалити з нього всі рядки, у яких кількість додатних елементів більша за кількість від’ємних елементів.

Варіант 15

  1. Дано двовимірний масив. Видалити з нього перший рядок, у якому кількість парних елементів найбільша.
  2. Дано двовимірний масив. Видалити з нього всі стовпці, у яких сума парних елементів більша за суму непарних елементів.

Варіант 16

  1. Дано двовимірний масив. Видалити з нього перший стовпець, у якому кількість непарних елементів найменша.
  2. Дано двовимірний масив. Видалити з нього всі рядки, які складаються тільки з від’ємних елементів.

Варіант 17

  1. Дано двовимірний масив. Видалити рядок і стовпець, на перетині яких знаходиться елемент з найбільшим модулем.
  2. Дано двовимірний масив. Видалити з нього всі стовпці, у яких кількість парних елементів найбільша.

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