Під вставленням числа d у масив з n елементів перед елементом з індексом k будемо розуміти:
Це стандартний алгоритм, для якого зробимо функцію.
Напишіть функцію з прототипом 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++; // Збільшення кількості елементів
}
Знаходить індекс останнього однозначного елемента:
Вставляє число d перед елементом з індексом k:
Введіть початок інтервалу a: 1
Введіть кінець інтервалу b: 20
Введіть кількість елементів масиву n: 5
Початковий масив: 3 12 5 8 9
Введіть число x для вставки: 7
Масив після вставки: 3 12 5 8 7 9
Введіть початок інтервалу a: 10
Введіть кінець інтервалу b: 20
Введіть кількість елементів масиву n: 4
Початковий масив: 12 15 18 11
error: однозначні елементи відсутні
Введіть початок інтервалу a: 1
Введіть кінець інтервалу b: 10
Введіть кількість елементів масиву n: 3
Початковий масив: 2 5 8
Введіть число x для вставки: 1
Масив після вставки: 1 2 5 8
Ця програма демонструє роботу з масивом, пошук конкретних елементів та вставку нового елемента. Особливістю реалізації є пошук останнього однозначного числа та вставка перед ним нового елемента зі збільшенням розміру масиву.
При вставленні декількох елементів потрібно масив описувати з «запасом», запас обирати в залежності від умови задачі.
Якщо у масив вставляється два елемента, то спочатку потрібно виконати вставлення перед елементом з більшим індексом, а потім перед елементом з меншим індексом.
Якщо у масив вставляється багато елементів (функція вставлення використовується у циклі), то для їх вставлення масив потрібно продивлятися починаючи з останнього елемента.
Напишіть програму, яка:
Зрозуміло, що при описі масиву, потрібно вказувати потрійну кількість елементів, бо, якщо всі елементи будуть однозначними числами, то кількість елементів масиву збільшиться у 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.
Якщо за умови завдання вказується, використовувати функції пошуку.