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

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

У цій главі скомпоновані задачі таких типів:

  1. В одновимірному масиві поміняти місцями два елемента за їх індексами.
  2. В одновимірному масиві переставити у зворотному порядку всі елементи між двома конкретними елементами за їх індексами.
  3. Для пошуку індексів елементів будемо використовувати функції FindFirst, FindLast, IndMin, IndMax.

Приклад 1

Напишіть функцію з прототипом void SwapArr(int* arr, int n, int k1, int k2), яка у масиві arr міняє місцями елементи з індексами k1 та k2.

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

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

#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 FindFirst(int* arr, int n);
int FindLast(int* arr, int n);
void SwapArr(int* arr, int n, int k1, int k2);

int main() {
    srand(time(0));  // Ініціалізація генератора випадкових чисел
    
    int a, b, n;
    cout << "Введіть початок інтервалу a: ";
    cin >> a;
    cout << "Введіть кінець інтервалу b: ";
    cin >> b;
    cout << "Введіть кількість елементів масиву n: ";
    cin >> n;
    
    int mass[n];  // Оголошення масиву
    
    RandArr(mass, n, a, b);  // Заповнення масиву
    cout << "Початковий масив: ";
    PrintArr(mass, n);       // Виведення масиву
    
    int firstEven = FindFirst(mass, n);    // Індекс першого парного
    int lastOdd = FindLast(mass, n);       // Індекс останнього непарного
    
    if (firstEven != -1 && lastOdd != -1) {
         SwapArr(mass, n, firstEven, lastOdd);  // Обмін елементів
         cout << "Масив після обміну: ";
         PrintArr(mass, n);
     } else {
         cout << "error: не знайдено потрібних елементів";
     }
    
    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 FindFirst(int* arr, int n) {
    for (int i = 0; i < n; i++) {
        if (arr[i] % 2 == 0) {  // Перевірка на парність
            return i;
        }
    }
    return -1;  // Якщо парних елементів немає
}

int FindLast(int* arr, int n) {
    for (int i = n - 1; i >= 0; i--) {
        if (arr[i] % 2 != 0) {  // Перевірка на непарність
            return i;
        }
    }
    return -1;  // Якщо непарних елементів немає
}

void SwapArr(int* arr, int n, int k1, int k2) {
    if (k1 >= 0 && k1 < n && k2 >= 0 && k2 < n) {
        int temp = arr[k1];
        arr[k1] = arr[k2];
        arr[k2] = temp;
    }
}

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

FindFirst

Знаходить індекс першого парного елемента:

FindLast

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

SwapArr

Міняє місцями два елементи масиву:

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

Тест 1 (успішний обмін):

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

Тест 2 (немає парних елементів):

Введіть початок інтервалу a: 1
Введіть кінець інтервалу b: 9
Введіть кількість елементів масиву n: 5
Початковий масив: 3 7 5 9 1 
Error: не знайдено потрібних елементів

Тест 3 (немає непарних елементів):

Введіть початок інтервалу a: 2
Введіть кінець інтервалу b: 10
Введіть кількість елементів масиву n: 4
Початковий масив: 2 4 6 8 
Error: не знайдено потрібних елементів

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

Приклад 2

Напишіть функцію з прототипом void SwapArr(int* arr, int n, int k1, int k2), яка у масиві arr переставляє в зворотному порядку всі елементи, що знаходяться між елементами з індексами k1 та k2 включно.

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

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

#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);
void SwapArr(int* arr, int n, int k1, int k2);

int main() {
    srand(time(0));  // Ініціалізація генератора випадкових чисел
    
    int a, b, n;
    cout << "Введіть початок інтервалу a: ";
    cin >> a;
    cout << "Введіть кінець інтервалу b: ";
    cin >> b;
    cout << "Введіть кількість елементів масиву n: ";
    cin >> n;
    
    int mass[n];  // Оголошення масиву
    
    RandArr(mass, n, a, b);  // Заповнення масиву
    cout << "Початковий масив: ";
    PrintArr(mass, n);       // Виведення масиву
    
    // Реверсуємо весь масив (від першого до останнього елемента)
    SwapArr(mass, n, 0, n-1);
    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;
}

void SwapArr(int* arr, int n, int k1, int k2) {
    // Перевірка коректності індексів
    if (k1 < 0 || k2 >= n || k1 > k2) return;
    
    // Реверсування підмасиву від k1 до k2
    while (k1 < k2) {
        // Обмін елементів місцями
        int temp = arr[k1];
        arr[k1] = arr[k2];
        arr[k2] = temp;
        
        // Зсув індексів до центру
        k1++;
        k2--;
    }
}

Пояснення функції SwapArr

Функція SwapArr виконує наступні дії:

  1. Перевіряє коректність переданих індексів (k1 ≤ k2 і в межах масиву)
  2. Використовує два індекси (початковий і кінцевий), які рухаються до центру
  3. На кожній ітерації циклу:
  4. Процес продовжується, поки індекси не зустрінуться

Приклад роботи програми

Тест 1:

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

Тест 2:

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

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

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

Варіант 1

За допомогою функцій: RandArr, PrintArr, FindFirst, FindLast, SwapArr у одновимірному масиві поміняйте місцями перший та останній від'ємні елементи масиву. Якщо хоча б один із елементів не знайдено, то вивести повідомлення.

Варіант 2

За допомогою функцій: RandArr, PrintArr, FindFirst, FindLast, SwapArr у одновимірному масиві поміняйте місцями перший та останній додатні елементи масиву. Якщо хоча б один із елементів не знайдено, то вивести повідомлення.

Варіант 3

За допомогою функцій: RandArr, PrintArr, FindFirst, FindLast, SwapArr у одновимірному масиві поміняйте місцями перший та останній елементи масиву які кратні 3. Якщо хоча б один із елементів не знайдено, то вивести повідомлення.

Варіант 4

За допомогою функцій: RandArr, PrintArr, IndMin, IndMax, SwapArr у одновимірному масиві поміняйте місцями перший мінімальний та перший максимальний елементи. Якщо хоча б один із елементів не знайдено, то вивести повідомлення.

Варіант 5

За допомогою функцій: RandArr, PrintArr, IndMin, IndMax, SwapArr у одновимірному масиві поміняйте місцями останній мінімальний та останній максимальний елементи. Якщо хоча б один із елементів не знайдено, то вивести повідомлення.

Варіант 6

За допомогою функцій: RandArr, PrintArr, FindFirst, FindLast, SwapArr у одновимірному масиві поміняйте місцями перше та останнє однозначні числа. Якщо хоча б один із елементів не знайдено, то вивести повідомлення.

Варіант 7

За допомогою функцій: RandArr, PrintArr, FindFirst, FindLast, SwapArr у одновимірному масиві поміняйте місцями перше та останнє двозначні числа. Якщо хоча б один із елементів не знайдено, то вивести повідомлення.

Варіант 8

За допомогою функцій: RandArr, PrintArr, FindFirst, FindLast, SwapArr у одновимірному масиві поміняйте місцями його перше однозначне та останнє двозначне числа. Якщо хоча б один із елементів не знайдено, то вивести повідомлення.

Варіант 9

За допомогою функцій: RandArr, PrintArr, FindFirst, FindLast, IsPrime, SwapArr у одновимірному масиві поміняйте місцями його перше та останнє прості числа. Якщо хоча б один із елементів не знайдено, то вивести повідомлення.

Варіант 10

За допомогою функцій: RandArr, PrintArr, FindFirst, FindLast, IsFib, SwapArr у одновимірному масиві поміняйте місцями його перше та останнє числа Фібоначчі. Якщо хоча б один із елементів не знайдено, то вивести повідомлення.

Варіант 11

За допомогою функцій: RandArr, PrintArr, FindFirst, FindLast, SwapArr у одновимірному масиві переставте у зворотному порядку всі його елементи між першим та останнім від'ємними елементами. Якщо хоча б один із елементів не знайдено, то вивести повідомлення.

Варіант 12

За допомогою функцій: RandArr, PrintArr, FindFirst, FindLast, SwapArr у одновимірному масиві переставте у зворотному порядку всі його елементи між першим та останнім елементами, що кратні 5. Якщо хоча б один із елементів не знайдено, то вивести повідомлення.

Варіант 13

За допомогою функцій: RandArr, PrintArr, IndMin, IndMax, SwapArr у одновимірному масиві переставте у зворотному порядку його елементи між першим мінімальним та останнім максимальним. Якщо хоча б один із елементів не знайдено, то вивести повідомлення.

Варіант 14

За допомогою функцій: RandArr, PrintArr, FindFirst, FindLast, IsPrime, SwapArr у одновимірному масиві переставте у зворотному порядку його елементи між першим та останнім простими числами. Якщо хоча б один із елементів не знайдено, то вивести повідомлення.

Варіант 15

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

За допомогою функції PrintArr виведіть масив на екран.

За допомогою функції SwapArr у одновимірному масиві переставте елементи його половин у зворотному порядку.

Для парної кількості елементів, наприклад, було (0 1 2 3 4 5 6 7), стало (3 2 1 0 7 6 5 4).

Для непарної кількості елементів, наприклад, було (0 1 2 3 4 5 6 7 8), стало (3 2 1 0 8 7 6 5 4).

Варіант 16

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

За допомогою функції PrintArr виведіть масив на екран.

Напишіть функцію з прототипом void SwapArr(int* arr, int n), яка міняє місцями його половини таким чином:

Для парної кількості елементів, наприклад, було (0 1 2 3 4 5 6 7 8 9), стало (5 6 7 8 9 0 1 2 3 4).

Для непарної кількості елементів, наприклад, було (0 1 2 3 4 5 6 7 8), стало (5 6 7 8 0 1 2 3 4).

Варіант 17

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

За допомогою функції PrintArr виведіть масив на екран.

Якщо в масиві непарна кількість елементів, то вивести повідомлення.

Напишіть функцію з прототипом void SwapArr(int* arr, int n), яка міняє місцями його елементи таким чином: наприклад, було 0 1 2 3 4 5 6 7 8 9 стало 1 0 3 2 5 4 7 6 9 8. Тобто перший з другим, третій з четвертим ...

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