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

Функції з декількома вхідними або декількома вихідними масивами

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

  1. З елементу масиву А отримають елемент масиву В з тим же самим індексом (один перегляд масиву А);
  2. З елементу масиву А отримають елемент масиву В з іншим індексом (декілька переглядів масиву А);
  3. Один масив розділити на декілька масивів;
  4. Декілька масивів об’єднати в один.

Приклад 1

Напишіть функцію з прототипом void GetArr(int* arr1, int n, int* arr2), яка заповнює масив arr2 на основі елементів масиву arr1 за наступним правилом: якщо індекс елемента масиву arr1 парний, то відповідний елемент масиву arr2 дорівнює квадрату елемента з arr1, інакше — подвоєному значенню елемента з arr1. Кількість елементів у обох масивах дорівнює n.

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

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

#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 GetArr(int* arr1, int n, int* arr2);

int main() {
    srand(time(0));  // Ініціалізація генератора випадкових чисел

    int a, b, n;
    cout << "Введіть початок інтервалу a: ";
    cin >> a;
    cout << "Введіть кінець інтервалу b: ";
    cin >> b;
    cout << "Введіть кількість елементів масиву n: ";
    cin >> n;

    int mass1[n], mass2[n];  // Оголошення двох масивів

    RandArr(mass1, n, a, b);  // Заповнення першого масиву
    cout << "Початковий масив: ";
    PrintArr(mass1, n);       // Виведення першого масиву

    GetArr(mass1, n, mass2);  // Заповнення другого масиву
    cout << "Результуючий масив: ";
    PrintArr(mass2, 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 GetArr(int* arr1, int n, int* arr2) {
    for (int i = 0; i < n; i++) {
        if (i % 2 == 0) {  // Якщо індекс парний
            arr2[i] = arr1[i] * arr1[i];  // Квадрат елемента
        } else {  // Якщо індекс непарний
            arr2[i] = arr1[i] * 2;  // Подвоєне значення
        }
    }
}

2. Пояснення функції GetArr

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

  1. Проходить по всіх елементах вхідного масиву arr1
  2. Для кожного елемента перевіряє його індекс:
  3. Нічого не повертає (void), але змінює вміст масиву arr2

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

Тест 1:

Введіть початок інтервалу a: 1
Введіть кінець інтервалу b: 5
Введіть кількість елементів масиву n: 6
Початковий масив: 3 2 4 1 5 2
Результуючий масив: 9 4 16 2 25 4

Пояснення: - Елементи з парними індексами (0, 2, 4): 3²=9, 4²=16, 5²=25 - Елементи з непарними індексами (1, 3, 5): 2×2=4, 1×2=2, 2×2=4

Тест 2:

Введіть початок інтервалу a: 10
Введіть кінець інтервалу b: 20
Введіть кількість елементів масиву n: 5
Початковий масив: 12 15 18 11 14
Результуючий масив: 144 30 324 22 196

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

Приклад 2

Напишіть функцію з прототипом void GetArr(int* arr1, int n, int* arr2), яка заповнює масив arr2 на основі елементів масиву arr1 за наступним правилом: спочатку з масиву arr1 в масив arr2 переписуються всі парні елементи, а потім всі непарні. Кількість елементів у обох масивах дорівнює n.

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

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

#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 GetArr(int* arr1, int n, int* arr2);

int main() {
    srand(time(0));  // Ініціалізація генератора випадкових чисел

    int a, b, n;
    cout << "Введіть початок інтервалу a: ";
    cin >> a;
    cout << "Введіть кінець інтервалу b: ";
    cin >> b;
    cout << "Введіть кількість елементів масиву n: ";
    cin >> n;

    int mass1[n], mass2[n];  // Оголошення двох масивів

    RandArr(mass1, n, a, b);  // Заповнення першого масиву
    cout << "Початковий масив: ";
    PrintArr(mass1, n);       // Виведення першого масиву

    GetArr(mass1, n, mass2);  // Заповнення другого масиву
    cout << "Відсортований масив (спочатку парні, потім непарні): ";
    PrintArr(mass2, 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 GetArr(int* arr1, int n, int* arr2) {
    int currentIndex = 0;  // Індекс для запису наступного елемента

    // Спочатку записуємо всі парні елементи
    for (int i = 0; i < n; i++) {
        if (arr1[i] % 2 == 0) {
            arr2[currentIndex++] = arr1[i];
        }
    }

    // Потім записуємо всі непарні елементи
    for (int i = 0; i < n; i++) {
        if (arr1[i] % 2 != 0) {
            arr2[currentIndex++] = arr1[i];
        }
    }
}

2. Пояснення функції GetArr

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

  1. Ініціалізує індекс currentIndex = 0 для запису наступного елемента у arr2
  2. Перший прохід по масиву arr1:
  3. Другий прохід по масиву arr1:

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

Тест 1:

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

Тест 2:

Введіть початок інтервалу a: 15
Введіть кінець інтервалу b: 25
Введіть кількість елементів масиву n: 5
Початковий масив: 16 19 22 17 24
Відсортований масив (спочатку парні, потім непарні): 16 22 24 19 17

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

Приклад 3

Напишіть функцію з прототипом void SplitArr(int* arr1, int n, int* arr2, int* arr3) яка розділяє масив arr1 на масиви arr2 та arr3 за наступним правилом: першу половину масиву arr1 переписує в масив arr2, другу половину масиву arr1 переписує в масив arr3. У масиві arr1 кількість елементів 2*n, у масивах arr2 та arr3 кількість елементів n.

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

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

#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 SplitArr(int* arr1, int n, int* arr2, int* arr3);

int main() {
    srand(time(0));  // Ініціалізація генератора випадкових чисел

    int a, b, n;
    cout << "Введіть початок інтервалу a: ";
    cin >> a;
    cout << "Введіть кінець інтервалу b: ";
    cin >> b;
    cout << "Введіть значення n (розмір половинок масиву): ";
    cin >> n;

    int mass1[2*n], mass2[n], mass3[n];  // Оголошення масивів

    RandArr(mass1, 2*n, a, b);  // Заповнення основного масиву
    cout << "Початковий масив: ";
    PrintArr(mass1, 2*n);       // Виведення основного масиву

    SplitArr(mass1, 2*n, mass2, mass3);  // Розділення масиву
    cout << "Перша половина масиву: ";
    PrintArr(mass2, n);         // Виведення першої половини
    cout << "Друга половина масиву: ";
    PrintArr(mass3, 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 SplitArr(int* arr1, int n, int* arr2, int* arr3) {
    int half = n / 2;  // Розмір кожної половини

    // Копіюємо першу половину в arr2
    for (int i = 0; i < half; i++) {
        arr2[i] = arr1[i];
    }

    // Копіюємо другу половину в arr3
    for (int i = 0; i < half; i++) {
        arr3[i] = arr1[half + i];
    }
}

2. Пояснення функції SplitArr

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

  1. Визначає середину масиву arr1 (розмір кожної половини)
  2. Перший цикл:
  3. Другий цикл:

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

Тест 1:

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

Тест 2:

Введіть початок інтервалу a: 10
Введіть кінець інтервалу b: 20
Введіть значення n (розмір половинок масиву): 3
Початковий масив: 12 15 18 11 14 17
Перша половина масиву: 12 15 18
Друга половина масиву: 11 14 17

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

Приклад 4

Напишіть функцію з прототипом void JoinArr(int* arr1, int n, int* arr2, int m, int* arr3), яка об'єднує елементи масивів arr1 та arr2 у масив arr3.

Правило заповнення масиву arr3: спочатку переписати всі елементи з масиву arr1 в масив arr3, потім дописати в масив arr3 всі елементи з масиву arr2. У масиві arr1 кількість елементів n, у масиві arr2 кількість елементів m, у масиві arr3 кількість елементів n+m.

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

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

#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 JoinArr(int* arr1, int n, int* arr2, int m, int* arr3);

int main() {
    srand(time(0));  // Ініціалізація генератора випадкових чисел

    int a, b, n, m;
    cout << "Введіть початок інтервалу a: ";
    cin >> a;
    cout << "Введіть кінець інтервалу b: ";
    cin >> b;
    cout << "Введіть розмір першого масиву n: ";
    cin >> n;
    cout << "Введіть розмір другого масиву m: ";
    cin >> m;

    int mass1[n], mass2[m], mass3[n+m];  // Оголошення масивів

    RandArr(mass1, n, a, b);  // Заповнення першого масиву
    cout << "Перший масив: ";
    PrintArr(mass1, n);       // Виведення першого масиву

    RandArr(mass2, m, a, b);  // Заповнення другого масиву
    cout << "Другий масив: ";
    PrintArr(mass2, m);       // Виведення другого масиву

    JoinArr(mass1, n, mass2, m, mass3);  // Об'єднання масивів
    cout << "Об'єднаний масив: ";
    PrintArr(mass3, n+m);     // Виведення об'єднаного масиву

    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 JoinArr(int* arr1, int n, int* arr2, int m, int* arr3) {
    // Копіюємо елементи з першого масиву
    for (int i = 0; i < n; i++) {
        arr3[i] = arr1[i];
    }

    // Копіюємо елементи з другого масиву
    for (int i = 0; i < m; i++) {
        arr3[n + i] = arr2[i];
    }
}

2. Пояснення функції JoinArr

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

  1. Перший цикл:
  2. Другий цикл:

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

Тест 1:

Введіть початок інтервалу a: 1
Введіть кінець інтервалу b: 10
Введіть розмір першого масиву n: 3
Введіть розмір другого масиву m: 4
Перший масив: 5 2 8
Другий масив: 3 7 1 9
Об'єднаний масив: 5 2 8 3 7 1 9

Тест 2:

Введіть початок інтервалу a: 10
Введіть кінець інтервалу b: 20
Введіть розмір першого масиву n: 2
Введіть розмір другого масиву m: 2
Перший масив: 15 12
Другий масив: 18 14
Об'єднаний масив: 15 12 18 14

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

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

Варіант 1

Напишіть функцію з прототипом void GetArr(int* arr1, int n, int* arr2), яка заповнює масив arr2 на основі елементів масиву arr1 за наступним правилом:

  1. якщо елемент масиву arr1 парний, то arr2[i]=arr1[i]/2,
  2. якщо ні, то arr2[i]=arr1[i]*2

Кількість елементів у обох масивах дорівнює n.

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

Варіант 2

Напишіть функцію з прототипом void GetArr(int* arr1, int n, int* arr2), яка заповнює масив arr2 на основі елементів масиву arr1 за наступним правилом:

  1. якщо елемент масиву arr1 закінчується на 0, то arr2[i]=arr1[i]/10,
  2. якщо ні, то arr2[i]=arr1[i]*10

Кількість елементів у обох масивах дорівнює n.

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

Варіант 3

Напишіть функцію з прототипом void GetArr(int* arr1, int n, int* arr2), яка заповнює масив arr2 на основі елементів масиву arr1 за наступним правилом:

  1. якщо індекс елемента масиву arr1 парний, то arr2[i]=arr1[i]*2,
  2. якщо ні, то arr2[i]=arr1[i]*3.

Кількість елементів у обох масивах дорівнює n.

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

Варіант 4

Напишіть функцію з прототипом void GetArr(int* arr1, int n, int* arr2), яка заповнює масив arr2 на основі елементів масиву arr1 за наступним правилом:

  1. якщо індекс елемента масиву arr1 в діапазоні 3<=i<=8, то arr2[i]=arr1[i]+i,
  2. якщо ні, то arr2[i]=arr1[i]-i.

Кількість елементів у обох масивах дорівнює n.

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

Варіант 5

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

  1. спочатку переписує всі від’ємні елементи,
  2. потім всі інші.

Кількість елементів у обох масивах дорівнює n.

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

Варіант 6

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

  1. спочатку переписує всі однозначні елементи,
  2. потім всі інші.

Кількість елементів у обох масивах дорівнює n.

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

Варіант 7

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

  1. спочатку переписує всі однозначні числа,
  2. потім переписує всі двозначні числа,
  3. потім всі інші.

Кількість елементів у обох масивах дорівнює n.

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

Варіант 8

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

  1. спочатку переписує всі парні числа,
  2. потім переписує всі непарні числа, які кратні 3,
  3. потім всі інші.

Кількість елементів у обох масивах дорівнює n.

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

Варіант 9

Напишіть функцію з прототипом void GetArr(int* arr1, int n, int* arr2, int* arr3), яка заповнює масив arr3 на основі елементів масивів arr1 та arr2 таким чином: arr3[i]=arr1[i]+ arr2[i].

Кількість елементів у всіх масивах дорівнює n.

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

Варіант 10

Напишіть функцію з прототипом void GetArr(int* arr1, int n, int* arr2, int* arr3), яка заповнює масив arr3 на основі елементів масивів arr1 та arr2 таким чином: arr3[i]=arr1[i]*arr2[i].

Кількість елементів у всіх масивах дорівнює n.

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

Варіант 11

Напишіть функцію з прототипом void GetArr(int* arr1, int n, int* arr2, int* arr3), яка заповнює масив arr3 на основі елементів масивів arr1 та arr2 таким чином:

  1. якщо arr1[i]>arr2[i], то arr3[i]=arr1[i],
  2. якщо ні, то arr3[i]=arr2[i].

Кількість елементів у всіх масивах дорівнює n.

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

Варіант 12

Напишіть функцію з прототипом void GetArr(int* arr1, int n, int* arr2, int* arr3), яка заповнює масив arr3 на основі елементів масивів arr1 та arr2 таким чином:

  1. якщо елементи arr1[i] та arr2[i] обидва парні, то arr3[i]=1,
  2. якщо ні, то arr3[i]=0.

Кількість елементів у всіх масивах дорівнює n.

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

Варіант 13

Напишіть функцію з прототипом void GetArr(int* arr1, int n, int* arr2, float* arr3), яка заповнює масив arr3 на основі елементів масивів arr1 та arr2 таким чином: arr3[i] є середнім арифметичним відповідних елементів arr1[i] та arr2[i]

Напишіть функцію з прототипом void PrintArrFloat(float arr,int n) яка виводить на екран масив дійсних чисел.

Кількість елементів у всіх масивах дорівнює n.

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

Варіант 14

Напишіть функцію з прототипом void GetArr(int* arr1, int n, int* arr2, int* arr3), яка заповнює масив arr3 на основі елементів масивів arr1 та arr2 за формулами:

arr3[0]=arr1[0]+arr2[n-1]
arr3[1]=arr1[1]+arr2[n-2]
…
arr3[n-1]=arr1[n-1]+arr2[0]

Кількість елементів у всіх масивах дорівнює n.

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

Варіант 15

Напишіть функцію з прототипом void GetArr(int* arr1, int n, int* arr2, int m, int* arr3), яка заповнює масив arr3 на основі елементів масивів arr1 та arr2 таким чином:

  1. спочатку з масиву arr1 переписує всі парні елементи,
  2. потім з масиву arr2 переписує всі парні елементи,
  3. потім з масиву arr1 переписує всі непарні елементи,
  4. потім з масиву arr2 переписує всі непарні елементи.

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

Варіант 16

Напишіть функцію з прототипом void GetArr(int* arr1, int n, int* arr2, int* arr3), яка розділяє масив arr1 на масиви arr2 та arr3 таким чином: елементи з парними індексами переписуються у масив arr2, з непарними в масив arr3.

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

Варіант 17

Напишіть функцію з прототипом void GetArr(int* arr1, int n, int* arr2, int &m, int* arr3, int &k), яка розділяє масив arr1 на масиви arr2 та arr3 таким чином: парні елементи переписуються у масив arr2, непарні в масив arr3.

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

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