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


Вставка рядка або стовпця

Вставка одного рядка

Під вставкою у двовимірний масив заданого рядка перед рядком з номером t слід розуміти

  1. Збільшення кількості рядків масиву на 1. Тому масив потрібно описувати із «запасом» на один рядок;
  2. Зсув усіх рядків, починаючи з останнього, у t-й на один вниз.
  3. Присвоєння заданих значень елементам t-го рядка.

Приклад 1

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

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

Алгоритм

Щоб вставити рядок, потрібно в кожному стовпці вставити число. Для цього в кожному стовпці робимо зсув елементів вниз, починаючи з останнього у t-му. А елементу a[t][j] присвоюємо 10 у кожному стовпці.

Програма

/***********
 Дано двовимірний цілочисельний масив.
 Вставте в нього рядок з чисел 10 перед рядком з номером k.
***********/
#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 InsertRow(auto, int&, 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;
    
    randomizeMatrix(arr, M, N, minRand, maxRand);
    printMatrix(arr, M, N);
    cout << endl;
    
    int k;
    cout << endl << "Введіть номер рядка для вставки: " << endl;
    cin >> k;
    
    int s[maxN];  // Виправлено розмір масиву (M на N)
    for (int i = 0; i < N; i++) s[i] = 10;  // Заповнюємо рядок десятками
    
    if (k >= 0 && k < M) {
        InsertRow(arr, M, N, k, s);
    } else {
        cout << "Помилка в даних." << endl;
    }
    
    cout << 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 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);
        }
    }
}

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

Вставка кількох рядків

При вставці у масив кількох рядків потрібно масив описувати із «запасом», кількість вибирати залежно від умови задачі.

Якщо у масив вставляється кілька рядків, то кількість рядків збільшується, тому номер останнього рядка змінюється і дорівнює n + k, де k – лічильник вставлених рядків. Тому при вставці кількох рядків потрібно після установки рядка збільшувати лічильник вставлених елементів k.

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

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

Вставка багатьох рядків у масив – це три вкладені цикли. Перший, зовнішній цикл переглядає рядки починаючи з останнього і перевіряє, чи потрібно перед даним рядком вставляти новий рядок. Якщо рядок вставляти потрібно, другий, середній цикл у кожному стовпці (у прикладі з параметром j) зсуває всі елементи вниз починаючи з n + k-го останнього елемента (зсув елементів вниз – це третій цикл з параметром i). Всі три цикли повинні мати різні параметри (i1, j і i)!

Приклад 2

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

Алгоритм

Спочатку потрібно знайти номери рядків, в яких знаходяться найбільший (imx) і найменший (imn) елементи масиву.

Якщо imx > imn, то спочатку вставляється рядок із числами 99 перед рядком з номером imx, а потім рядок із числами 11 перед рядком з номером imn.

Якщо imx < imn, то спочатку вставляється рядок із числами 11 перед рядком з номером imn, а потім рядок із числами 99 перед рядком з номером imx.

Якщо imx = imn, тобто найбільший і найменший елементи знаходяться в одному рядку, тоді нічого у масив не вставляється.

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

або

Програма

/***********
 Дано двовимірний цілочисельний масив. Вставте в нього:
 - рядок з чисел 99 перед рядком з першим максимальним елементом
 - рядок з чисел 11 перед рядком з першим мінімальним елементом
***********/
#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 InsertRow(auto, int&, int, int, int*);
int FirstMax(auto, int, int);
int FirstMin(auto, 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;
    
    randomizeMatrix(arr, M, N, minRand, maxRand);
    printMatrix(arr, M, N);
    cout << endl;
    
    int imx = FirstMax(arr, M, N);
    int imm = FirstMin(arr, M, N);
    
    int s[maxN], s2[maxN];  // Виправлено розмір масивів
    for (int i = 0; i < N; i++) {
        s[i] = 99;
        s2[i] = 11;
    }
    
    cout << "imx=" << imx << "; imm=" << imm << endl;
    
    if (imx > imm) {
        InsertRow(arr, M, N, imx, s);
        InsertRow(arr, M, N, imm, s2);
    }
    else if (imx < imm) {
        InsertRow(arr, M, N, imm, s2);
        InsertRow(arr, M, N, imx, s);
    }
    else {
        cout << "max & min в одному рядку.";
    }
    
    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);
        }
    }
}

// Функція для вставки рядка перед k-тим рядком
void InsertRow(auto p, int &M, int N, int k, int* x) {
    M++;
    cout << endl << "Вставляємо рядок перед № " << k+1 << endl;
    for (int i = M-1; i > k; i--) {
        for (int j = 0; j < N; j++) {
            p[i][j] = p[i-1][j];
        }
    }
    for (int j = 0; j < N; j++) {
        p[k][j] = x[j];
    }
}

// Функція для знаходження рядка з першим максимальним елементом
int FirstMax(auto p, int M, int N) {
    int max = p[0][0], nm = 0;
    for (int i = 0; i < M; i++) {
        for (int j = 0; j < N; j++) {
            if (p[i][j] > max) {
                max = p[i][j];
                nm = i;
            }
        }
    }
    return nm;
}

// Функція для знаходження рядка з першим мінімальним елементом
int FirstMin(auto p, int M, int N) {
    int min = p[0][0], nm = 0;
    for (int i = 0; i < M; i++) {
        for (int j = 0; j < N; j++) {
            if (p[i][j] < min) {
                min = p[i][j];
                nm = i;
            }
        }
    }
    return nm;
}

Вставка одного стовпця

Під вставкою у двовимірний масив заданого стовпця перед стовпцем з номером t слід розуміти

  1. Збільшення кількості стовпців масиву на 1. Тому масив потрібно описувати із «запасом» на один стовпець;
  2. Зсув усіх стовпців, починаючи з останнього у t-й, на один вправо.
  3. Присвоєння заданих значень елементам t-го стовпця.

Приклад 3

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

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

Програма

/*******************************
 Дано двовимірний цілочисельний масив. Вставте в нього стовпець з чисел 99 перед стовпцем, 
 в якому знаходиться перший максимальний елемент.
*******************************/
#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 InsertCol(auto, int, int&, int, int*);
int FirstMax(auto, int, int);

int main() {
    srand(time(0));  // Виправлено grand на 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;
    
    int imx = FirstMax(arr, M, N);
    int s[maxM];  // Масив для нового стовпця
    for (int i = 0; i < M; i++) {
        s[i] = 99;
    }
    cout << "Перший максимальний елемент у стовпці: " << imx << endl;
    
    InsertCol(arr, M, N, imx, s);
    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);
        }
    }
}

// Функція для вставки стовпця перед k-тим стовпцем
void InsertCol(auto p, int M, int &N, int k, int* x) {
    N++;
    cout << endl << "Вставляємо стовпець перед № " << k << endl;
    
    // Зсув стовпців вправо
    for (int j = N-1; j > k; j--) {
        for (int i = 0; i < M; i++) {
            p[i][j] = p[i][j-1];
        }
    }
    
    // Вставка нового стовпця
    for (int i = 0; i < M; i++) {
        p[i][k] = x[i];
    }
}

// Функція для знаходження першого стовпця з максимальним елементом
int FirstMax(auto p, int M, int N) {
    int max = p[0][0], nm = 0;
    for (int j = 0; j < N; j++) {
        for (int i = 0; i < M; i++) {
            if (p[i][j] > max) {
                max = p[i][j];
                nm = j;
            }
        }
    }
    return nm;
}

Вставка кількох стовпців

При вставці у масив кількох стовпців потрібно масив описувати із «запасом», розмір вибирати залежно від умови задачі.

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

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

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

Вставка багатьох стовпців у масив – це три вкладені цикли. Перший, зовнішній цикл (у прикладі з параметром j1) переглядає колонки починаючи з останнього і перевіряє, чи потрібно перед даним стовпцем вставляти новий стовпець. Якщо стовпець вставляти потрібно, другий, середній цикл у кожному рядку (у прикладі з параметром i) зсуває всі елементи вправо починаючи з m + k - 1 - останнього (зсув елементів вправо – це третій цикл з параметром j). Всі три цикли повинні мати різні параметри (j1, i і j)!

Приклад 4

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

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

Програма

/***********
 Дано двовимірний цілочисельний масив. Вставте одновимірний масив після всіх стовпців з парними номерами.
***********/
#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 InsertCol(auto, int, 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;
    
    randomizeMatrix(arr, M, N, minRand, maxRand);
    printMatrix(arr, M, N);
    cout << endl;
    
    int s[maxM];  // Масив для вставки (квадрати індексів)
    for (int i = 0; i < M; i++) {
        s[i] = i * i;
    }
    
    // Вставка після парних стовпців (обхід справа наліво)
    for (int j = N - 1; j >= 0; j--) {  
        if (j % 2 == 0) {
            InsertCol(arr, M, N, j + 1, s);  // Вставка після стовпця j
        }
    }
    
    printMatrix(arr, M, N);
    return 0;
}

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

Варіант 1

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

Варіант 2

  1. Дано двовимірний масив. Вставте в нього рядок із заданою послідовністю чисел перед рядком з номером s.
  2. Дано двовимірний масив. Вставте в нього стовпець із цифр 100 після всіх стовпців з парними номерами.

Варіант 3

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

Варіант 4

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

Варіант 5

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

Варіант 6

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

Варіант 7

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

Варіант 8

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

Варіант 9

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

Варіант 10

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

Варіант 11

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

Варіант 12

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

Варіант 13

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

Варіант 14

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

Варіант 15

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

Варіант 16

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

Варіант 17

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

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