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

Функція вставлення елементу у масив

Вставлення одного елементу

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

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

Це стандартний алгоритм, для якого зробимо функцію.

Приклад 1

Напишіть функцію з прототипом void InsArr(int* arr, int& n, int d, int k), яка вставляє число d у масив arr з n елементів перед елементом з індексом k . Функція збільшує n - кількість елементів масиву на 1.

Напишіть програму, яка:

Повний код програми

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

void RandArr(int* arr, int n, int a, int b);
void PrintArr(int* arr, int n);
int FindLast(int* arr, int n);
void InsArr(int* arr, int& n, int d, int k);

int main() {
    srand(time(0));  // Ініціалізація генератора випадкових чисел
    
    int a, b, n;
    cout << "Введіть початок інтервалу a: ";
    cin >> a;
    cout << "Введіть кінець інтервалу b: ";
    cin >> b;
    cout << "Введіть кількість елементів масиву n: ";
    cin >> n;
    
    int mass[n+2];  // Оголошення масиву з запасом для вставки
    
    RandArr(mass, n, a, b);  // Заповнення масиву
    cout << "Початковий масив: ";
    PrintArr(mass, n);       // Виведення масиву
    
    int index = FindLast(mass, n);  // Пошук останнього однозначного елемента
    
    if (index == -1) {
        cout << "error: однозначні елементи відсутні";
    } else {
        int x;
        cout << "Введіть число x для вставки: ";
        cin >> x;
        InsArr(mass, n, x, index);  // Вставка числа x перед знайденим елементом
        cout << "Масив після вставки: ";
        PrintArr(mass, n);
    }
    
    return 0;
}

void RandArr(int* arr, int n, int a, int b) {
    for (int i = 0; i < n; i++) {
        arr[i] = a + rand() % (b - a + 1);
    }
}

void PrintArr(int* arr, int n) {
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

int FindLast(int* arr, int n) {
     for (int i = n - 1; i >= 0; i--) {
         if ((arr[i] >= -9 && arr[i] <= -1) || (arr[i] >= 1 && arr[i] <= 9)) {  // Перевірка на однозначність
             return i;
         }
     }
     return -1;  // Якщо однозначних елементів немає
 }

void InsArr(int* arr, int& n, int d, int k) {
    if (k < 0 || k > n) return;  // Перевірка коректності індексу
    
    // Зсув елементів праворуч, починаючи з k
    for (int i = n; i > k; i--) {
        arr[i] = arr[i - 1];
    }
    
    arr[k] = d;  // Вставка нового елемента
    n++;         // Збільшення кількості елементів
}

Пояснення функцій

FindLast

Знаходить індекс останнього однозначного елемента:

InsArr

Вставляє число d перед елементом з індексом k:

Тестування роботи програми

Тест 1 (є однозначні елементи):

Введіть початок інтервалу a: 1
Введіть кінець інтервалу b: 20
Введіть кількість елементів масиву n: 5
Початковий масив: 3 12 5 8 9 
Введіть число x для вставки: 7
Масив після вставки: 3 12 5 8 7 9

Тест 2 (немає однозначних елементів):

Введіть початок інтервалу a: 10
Введіть кінець інтервалу b: 20
Введіть кількість елементів масиву n: 4
Початковий масив: 12 15 18 11 
error: однозначні елементи відсутні

Тест 3 (вставка перед першим елементом):

Введіть початок інтервалу a: 1
Введіть кінець інтервалу b: 10
Введіть кількість елементів масиву n: 3
Початковий масив: 2 5 8 
Введіть число x для вставки: 1
Масив після вставки: 1 2 5 8

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

Вставлення декількох елементів

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

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

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

Приклад 2

Напишіть програму, яка:

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

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

1 100  // Діапазон [1, 100]
5      // Розмір масиву
10     // Число x для вставки
14 7 92 3 45  // Початковий масив
14 10 7 10 92 10 3 10 45  // Масив після вставки

Код програми з згорнутими функціями

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

void RandArr(int* arr, int n, int a, int b);
void PrintArr(int* arr, int n);
void InsArr(int* arr, int& n, int d, int k);

int main()
{
    srand(time(0));
    int a, b; cin >> a >> b;
    int n; cin >> n; int mass[3 * n]; // Масив з потрійним розміром
    RandArr(mass, n, a, b);
    PrintArr(mass, n);
    int x; cin >> x;
    
    for (int i = n - 1; i >= 0; i--)
    {
        if (mass[i] / 10 == 0) // Перевірка на однозначність
        {
            InsArr(mass, n, x, i + 1); // Вставлення після
            InsArr(mass, n, x, i);      // Вставлення перед
        }
    }
    
    PrintArr(mass, n);
    return 0;
}

void RandArr(int* arr, int n, int a, int b)
{
    for (int i = 0; i < n; i++)
    {
        arr[i] = a + rand() % (b - a + 1); // Генерація випадкового числа в діапазоні [a, b]
    }
}

void PrintArr(int* arr, int n)
{
    for (int i = 0; i < n; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
}

void InsArr(int* arr, int& n, int d, int k)
{
    // Зсув елементів праворуч від позиції k на 1 позицію
    for (int i = n; i > k; i--)
    {
        arr[i] = arr[i - 1];
    }
    arr[k] = d; // Вставлення числа d на позицію k
    n++; // Збільшення розміру масиву
}

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

Одновимірний масив заповнювати випадковими числами за допомогою функції RandArr та виводити на екран за допомогою функції PrintArr.

Вставляти елемент за допомогою функції InsArr.

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

Варіант 1

  1. Вставити число В перед останнім парним числом масиву. Додатково використовувати функцію FindLast.
  2. Вставити число В після кожного парного числа масиву.

Варіант 2

  1. Вставити число В після першого від’ємного числа масиву. Додатково використовувати функцію FindFirst.
  2. Вставити число В перед кожним від’ємним числом масиву.

Варіант 3

  1. Вставити число В у масив перед останнім числом, яке більше числа 20. Додатково використовувати функцію FindLast.
  2. Вставити число В у масив після кожного числа, яке більше числа Х.

Варіант 4

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

Варіант 5

  1. Вставити число В перед останнім максимальним числом масиву. Додатково використовувати функцію IndMax.
  2. Вставити число В після всіх максимальних чисел. Додатково використовувати функцію IndMax.

Варіант 6

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

Варіант 7

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

Варіант 8

  1. Вставити число В у масив після першого числа, яке кратне 3 або 5. Додатково використовувати функцію FindFirst.
  2. Вставити число В у масив перед кожним числом, яке кратне 3 або 5.

Варіант 9

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

Варіант 10

  1. Вставити число В у масив перед останнім числом, сума цифр якого дорівнює 10. Додатково використовувати функції FindLast та SumDig.
  2. Вставити число В у масив після кожного числа, сума цифр якого дорівнює Х. Додатково використовувати функцію SumDig.

Варіант 11

  1. Вставити число В у масив перед першим числом, в запису якого є цифра 5. Додатково використовувати функції FindFirst та NumDigCofA.
  2. Вставити число В у масив після кожного числа, в запису якого є цифра 5. Додатково використовувати функцію NumDigCofA.

Варіант 12

  1. Вставити число В у масив після останнього числа, у якого перша цифра дорівнює 3. Додатково використовувати функції FindLast та FirstDig.
  2. Вставити число В у масив перед кожним числом, у якого перша цифра дорівнює С. Додатково використовувати функцію FirstDig.

Варіант 13

  1. Вставити число В у масив перед першим числом, яке складається з однакових цифр (включаючи однозначні). Додатково використовувати функції FindFirst, NumDig та NumDigCofA.
  2. Вставити число В у масив після кожного числа, яке складається з однакових цифр (включаючи однозначні). Додатково використовувати функції NumDigCofA та NumDig.

Варіант 14

  1. Вставити число В у масив перед першим простим числом. Додатково використовувати функції FindFirst та IsPrime.
  2. Вставити число В у масив після кожного простого числа. Додатково використовувати функцію IsPrime.

Варіант 15

  1. Вставити число В у масив перед останнім числом, у якого цифри розташовані за спаданням (321, 52). Додатково використовувати функцію FindLast та написати функцію з прототипом bool IsDesc(int n), яка визначає, чи розташовані цифри числа n за спаданням?
  2. Вставити число В у масив після кожного числа, у якого цифри розташовані за спаданням (321, 52). Додатково використовувати написану функцію IsDesc.

Варіант 16

  1. Вставити число В у масив після останнього числа Фібоначчі. Додатково використовувати функції FindLast та IsFib.
  2. Вставити число В у масив перед кожним числом Фібоначчі. Додатково використовувати функцію IsFib.

Варіант 17

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

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