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

Функції знаходження індексу першого або останнього елемента масиву, що задовольняє заданій умові

У цій главі зібрані задачі таких типів:

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

Якщо потрібний елемент не знайдено, функції повинні повертати число -1.

Умова пошуку може бути різною (від’ємне число, парне число, просте тощо). У “простому” варіанті ми змінюємо умову пошуку всередині функції. (Передавати умову як параметр теж можна, але це тема, яку зазвичай вивчають пізніше.)

Приклад 1

Напишіть функцію з прототипом int FindFirst(int* arr, int n), яка знаходить індекс першого від’ємного елемента у масиві. Якщо від’ємний елемент не знайдено — повертає -1.

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

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 FindFirst(int* arr, int n);

int main() {
    srand((unsigned)time(0));

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

    int* mass = new int[n];

    RandArr(mass, n, a, b);
    cout << "Згенерований масив: ";
    PrintArr(mass, n);

    int index = FindFirst(mass, n);

    if (index == -1) {
        cout << "Від'ємні елементи відсутні";
    } else {
        cout << "Перший від'ємний елемент: " << mass[index]
             << " з індексом " << index;
    }

    delete[] mass;
    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] < 0) return i;
    }
    return -1;
}

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

  1. Функція проходить по масиву зліва направо.
  2. Перша позиція, де виконується умова arr[i] < 0, і є відповіддю — повертається i.
  3. Якщо цикл завершився і від’ємних елементів не знайдено — повертає -1.

Приклад 2

Напишіть функцію int FindLast(int* arr, int 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);

int main() {
    srand((unsigned)time(0));

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

    int* mass = new int[n];

    RandArr(mass, n, a, b);
    cout << "Згенерований масив: ";
    PrintArr(mass, n);

    int index = FindLast(mass, n);

    if (index == -1) {
        cout << "Від'ємні елементи відсутні";
    } else {
        cout << "Останній від'ємний елемент: " << mass[index]
             << " з індексом " << index;
    }

    delete[] mass;
    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) {
    int lastIndex = -1;
    for (int i = 0; i < n; i++) {
        if (arr[i] < 0) lastIndex = i;
    }
    return lastIndex;
}

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

  1. Змінна lastIndex починається з -1.
  2. Ми переглядаємо весь масив. Коли знаходимо елемент, що підходить, оновлюємо lastIndex.
  3. Після завершення циклу в lastIndex зберігається індекс останнього знайденого елемента (або -1).

Приклад 3

Напишіть функцію int FindLastPrime(int* arr, int n), яка знаходить індекс останнього простого числа у масиві. Для перевірки простоти використайте функцію IsPrime. Якщо простих чисел немає — повертає -1.

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

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

void RandArr(int* arr, int n, int a, int b);
void PrintArr(int* arr, int n);
bool IsPrime(int x);
int FindLastPrime(int* arr, int n);

int main() {
    srand((unsigned)time(0));

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

    int* mass = new int[n];

    RandArr(mass, n, a, b);
    cout << "Згенерований масив: ";
    PrintArr(mass, n);

    int index = FindLastPrime(mass, n);

    if (index == -1) {
        cout << "Прості числа відсутні";
    } else {
        cout << "Останнє просте число: " << mass[index]
             << " з індексом " << index;
    }

    delete[] mass;
    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;
}

bool IsPrime(int x) {
    if (x <= 1) return false;
    if (x == 2) return true;
    if (x % 2 == 0) return false;

    int r = (int)sqrt((double)x);
    for (int i = 3; i <= r; i += 2) {
        if (x % i == 0) return false;
    }
    return true;
}

int FindLastPrime(int* arr, int n) {
    int lastIndex = -1;
    for (int i = 0; i < n; i++) {
        if (IsPrime(arr[i])) lastIndex = i;
    }
    return lastIndex;
}

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

Варіант 1

Напишіть функцію з прототипом int FindFirst(int* arr, int n), яка знаходить індекс першого парного числа у масиві. Якщо елемент не знайдено — повертає -1.

Напишіть програму, яка: заповнює масив функцією RandArr; виводить масив функцією PrintArr; знаходить індекс функцією FindFirst; виводить знайдений елемент та індекс або повідомлення про відсутність.

Варіант 2

Напишіть функцію з прототипом int FindLast(int* arr, int n), яка знаходить індекс останнього непарного числа у масиві. Якщо елемент не знайдено — повертає -1.

Напишіть програму, яка: заповнює масив функцією RandArr; виводить масив функцією PrintArr; знаходить індекс функцією FindLast; виводить знайдений елемент та індекс або повідомлення про відсутність.

Варіант 3

Напишіть функцію з прототипом int FindFirst(int* arr, int n), яка знаходить індекс першого числа, що кратне 3. Якщо елемент не знайдено — повертає -1.

Напишіть програму, яка: заповнює масив функцією RandArr; виводить масив функцією PrintArr; знаходить індекс функцією FindFirst; виводить знайдений елемент та індекс або повідомлення про відсутність.

Варіант 4

Напишіть функцію з прототипом int FindLast(int* arr, int n), яка знаходить індекс останнього числа, що кратне 5. Якщо елемент не знайдено — повертає -1.

Напишіть програму, яка: заповнює масив функцією RandArr; виводить масив функцією PrintArr; знаходить індекс функцією FindLast; виводить знайдений елемент та індекс або повідомлення про відсутність.

Варіант 5

Напишіть функцію з прототипом int FindFirst(int* arr, int n), яка знаходить індекс першого числа, що закінчується на 0. Якщо елемент не знайдено — повертає -1.

Напишіть програму, яка: заповнює масив функцією RandArr; виводить масив функцією PrintArr; знаходить індекс функцією FindFirst; виводить знайдений елемент та індекс або повідомлення про відсутність.

Варіант 6

Напишіть функцію з прототипом int FindLast(int* arr, int n), яка знаходить індекс останнього числа, що закінчується на 5. Якщо елемент не знайдено — повертає -1.

Напишіть програму, яка: заповнює масив функцією RandArr; виводить масив функцією PrintArr; знаходить індекс функцією FindLast; виводить знайдений елемент та індекс або повідомлення про відсутність.

Варіант 7

Напишіть функцію з прототипом int FindFirst(int* arr, int n), яка знаходить індекс першого однозначного числа у масиві. Якщо елемент не знайдено — повертає -1.

Напишіть програму, яка: заповнює масив функцією RandArr; виводить масив функцією PrintArr; знаходить індекс функцією FindFirst; виводить знайдений елемент та індекс або повідомлення про відсутність.

Варіант 8

Напишіть функцію з прототипом int FindLast(int* arr, int n), яка знаходить індекс останнього двозначного числа у масиві. Якщо елемент не знайдено — повертає -1.

Напишіть програму, яка: заповнює масив функцією RandArr; виводить масив функцією PrintArr; знаходить індекс функцією FindLast; виводить знайдений елемент та індекс або повідомлення про відсутність.

Варіант 9

Напишіть функцію з прототипом int FindFirst(int* arr, int n), яка знаходить індекс першого числа, що починається на цифру 1. Для знаходження першої цифри використати функцію FirstDig. Якщо елемент не знайдено — повертає -1.

Напишіть програму, яка: заповнює масив функцією RandArr; виводить масив функцією PrintArr; знаходить індекс функцією FindFirst; виводить знайдений елемент та індекс або повідомлення про відсутність.

Варіант 10

Напишіть функцію з прототипом int FindLast(int* arr, int n), яка знаходить індекс останнього числа, що починається на цифру 7. Для знаходження першої цифри використати функцію FirstDig. Якщо елемент не знайдено — повертає -1.

Напишіть програму, яка: заповнює масив функцією RandArr; виводить масив функцією PrintArr; знаходить індекс функцією FindLast; виводить знайдений елемент та індекс або повідомлення про відсутність.

Варіант 11

Напишіть функцію з прототипом int FindFirst(int* arr, int n), яка знаходить індекс першого простого числа у масиві. Для перевірки використовувати функцію IsPrime. Якщо елемент не знайдено — повертає -1.

Напишіть програму, яка: заповнює масив функцією RandArr; виводить масив функцією PrintArr; знаходить індекс функцією FindFirst; виводить знайдений елемент та індекс або повідомлення про відсутність.

Варіант 12

Напишіть функцію з прототипом int FindLast(int* arr, int n), яка знаходить індекс останнього непростого числа у масиві. Для перевірки використовувати функцію IsPrime. Якщо елемент не знайдено — повертає -1.

Напишіть програму, яка: заповнює масив функцією RandArr; виводить масив функцією PrintArr; знаходить індекс функцією FindLast; виводить знайдений елемент та індекс або повідомлення про відсутність.

Варіант 13

Напишіть функцію з прототипом int FindFirst(int* arr, int n), яка знаходить індекс першого числа Фібоначчі у масиві. Для перевірки використовувати функцію IsFib. Якщо елемент не знайдено — повертає -1.

Напишіть програму, яка: заповнює масив функцією RandArr; виводить масив функцією PrintArr; знаходить індекс функцією FindFirst; виводить знайдений елемент та індекс або повідомлення про відсутність.

Варіант 14

Напишіть функцію з прототипом int FindLast(int* arr, int n), яка знаходить індекс останнього числа Фібоначчі у масиві. Для перевірки використовувати функцію IsFib. Якщо елемент не знайдено — повертає -1.

Напишіть програму, яка: заповнює масив функцією RandArr; виводить масив функцією PrintArr; знаходить індекс функцією FindLast; виводить знайдений елемент та індекс або повідомлення про відсутність.

Варіант 15

Напишіть функцію з прототипом int FindFirst(int* arr, int n), яка знаходить індекс першого числа, у якого сума цифр парна. Для обчислення суми цифр використати функцію SumDig. Якщо елемент не знайдено — повертає -1.

Напишіть програму, яка: заповнює масив функцією RandArr; виводить масив функцією PrintArr; знаходить індекс функцією FindFirst; виводить знайдений елемент та індекс або повідомлення про відсутність.

Варіант 16

Напишіть функцію з прототипом int FindLast(int* arr, int n), яка знаходить індекс останнього числа, у якого сума цифр непарна. Для обчислення суми цифр використати функцію SumDig. Якщо елемент не знайдено — повертає -1.

Напишіть програму, яка: заповнює масив функцією RandArr; виводить масив функцією PrintArr; знаходить індекс функцією FindLast; виводить знайдений елемент та індекс або повідомлення про відсутність.

Варіант 17

Напишіть функцію з прототипом int FindFirst(int* arr, int n), яка знаходить індекс першого числа-паліндрома у масиві. Для перевірки використовувати функцію IsPal. Якщо елемент не знайдено — повертає -1.

Напишіть програму, яка: заповнює масив функцією RandArr; виводить масив функцією PrintArr; знаходить індекс функцією FindFirst; виводить знайдений елемент та індекс або повідомлення про відсутність.

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