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

Функції знаходження індексу мінімального або максимального елементу

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

  1. В одновимірному масиві знайти індекс мінімального числа.
  2. В одновимірному масиві знайти індекс максимального числа.
  3. В одновимірному масиві знайти індекс мінімального числа серед чисел з деякою ознакою.
  4. В одновимірному масиві знайти індекс максимального числа серед чисел з деякою ознакою.

Функція може повертати:

  1. Мінімальний індекс, тобто є кілька елементів які нам потрібні, і ми вибираємо серед них перший.
  2. Максимальний індекс, тобто є кілька елементів які нам потрібні, і ми вибираємо серед них останній.
  3. Число -1, якщо потрібний елемент не було знайдено.

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

Приклад 1

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

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 index = IndMin(mass, n);  // Пошук індексу мінімального елемента
    cout << "Мінімальний елемент: " << mass[index] 
         << " з індексом " << index;
    
    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 IndMin(int* arr, int n) {
    int minIndex = 0;  // Початкове значення - перший елемент
    
    for (int i = 1; i < n; i++) {
        if (arr[i] < arr[minIndex]) {  // Порівняння з поточним мінімумом
            minIndex = i;  // Оновлення індексу мінімального елемента
        }
    }
    
    return minIndex;
}

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

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

  1. Ініціалізує змінну minIndex значенням 0 (індекс першого елемента)
  2. Проходить по всіх елементах масиву, починаючи з другого
  3. Для кожного елемента порівнює його значення з поточним мінімальним (arr[i] < arr[minIndex])
  4. Якщо знайдено менший елемент:
  5. Після завершення циклу повертає індекс першого мінімального елемента

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

Тест 1:

Введіть початок інтервалу a: 10
Введіть кінець інтервалу b: 20
Введіть кількість елементів масиву n: 5
Згенерований масив: 15 12 18 11 14 
Мінімальний елемент: 11 з індексом 3

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

Введіть початок інтервалу a: 5
Введіть кінець інтервалу b: 10
Введіть кількість елементів масиву n: 6
Згенерований масив: 7 5 8 5 9 6 
Мінімальний елемент: 5 з індексом 1

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

Приклад 2

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

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 index = IndMax(mass, n);  // Пошук останнього максимального парного елемента
    
    if (index == -1) {
        cout << "Парні елементи відсутні";
    } else {
        cout << "Останній максимальний парний елемент: " << mass[index] 
             << " з індексом " << index;
    }
    
    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 IndMax(int* arr, int n) {
    int maxIndex = -1;      // Індекс останнього максимального парного елемента
    int maxEvenValue = -1;  // Значення максимального парного елемента
    
    for (int i = 0; i < n; i++) {
        if (arr[i] % 2 == 0) {  // Перевірка на парність
            if (maxIndex == -1 || arr[i] >= maxEvenValue) {
                maxEvenValue = arr[i];
                maxIndex = i;
            }
        }
    }
    
    return maxIndex;
}

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

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

  1. Ініціалізує змінні:
  2. Проходить по всіх елементах масиву
  3. Для кожного парного елемента (arr[i] % 2 == 0):
  4. Повертає індекс останнього максимального парного елемента або -1

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

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

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

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

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

Тест 3 (кілька однакових максимальних значень):

Введіть початок інтервалу a: 5
Введіть кінець інтервалу b: 15
Введіть кількість елементів масиву n: 8
Згенерований масив: 6 12 7 12 9 10 12 11 
Останній максимальний парний елемент: 12 з індексом 6

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

Приклад 3

Напишіть функцію з прототипом int IndMin (int* arr, int n), яка серед чисел Фібоначчі масиву знаходить індекс останнього мінімального елемента.

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

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

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

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 index = IndMin(mass, n);  // Пошук останнього мінімального числа Фібоначчі
    
    if (index == -1) {
        cout << "Числа Фібоначчі відсутні";
    } else {
        cout << "Останнє мінімальне число Фібоначчі: " << mass[index] 
             << " з індексом " << index;
    }
    
    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 IsFib(int n) {
    if (n < 0) return false;
    
    // Число є Фібоначчі, якщо (5*n^2 + 4) або (5*n^2 - 4) є ідеальним квадратом
    int test1 = 5 * n * n + 4;
    int test2 = 5 * n * n - 4;
    
    int sqrt1 = sqrt(test1);
    int sqrt2 = sqrt(test2);
    
    return (sqrt1 * sqrt1 == test1) || (sqrt2 * sqrt2 == test2);
}

int IndMin(int* arr, int n) {
    int minIndex = -1;       // Індекс останнього мінімального числа Фібоначчі
    int minFibValue = -1;    // Значення мінімального числа Фібоначчі
    
    for (int i = 0; i < n; i++) {
        if (IsFib(arr[i])) {  // Перевірка чи є число Фібоначчі
            if (minIndex == -1 || arr[i] <= minFibValue) {
                minFibValue = arr[i];
                minIndex = i;
            }
        }
    }
    
    return minIndex;
}

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

Функція IsFib

Перевіряє, чи є число числом Фібоначчі:

  1. Від'ємні числа не можуть бути числами Фібоначчі
  2. Використовує математичну властивість: число n є числом Фібоначчі, якщо хоча б один з виразів (5n² + 4) або (5n² - 4) є ідеальним квадратом
  3. Обчислює квадратні корені та перевіряє, чи є вони цілими числами

Функція IndMin

Знаходить останнє мінімальне число Фібоначчі в масиві:

  1. Проходить по всіх елементах масиву
  2. Для кожного числа Фібоначчі (перевіряє через IsFib)
  3. Запам'ятовує індекс останнього мінімального числа
  4. Повертає -1, якщо чисел Фібоначчі не знайдено

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

Тест 1 (є числа Фібоначчі):

Введіть початок інтервалу a: 1
Введіть кінець інтервалу b: 20
Введіть кількість елементів масиву n: 8
Згенерований масив: 1 8 13 5 21 2 3 4 
Останнє мінімальне число Фібоначчі: 2 з індексом 5

Тест 2 (немає чисел Фібоначчі):

Введіть початок інтервалу a: 4
Введіть кінець інтервалу b: 10
Введіть кількість елементів масиву n: 5
Згенерований масив: 6 7 8 9 10 
Числа Фібоначчі відсутні

Тест 3 (кілька однакових мінімальних значень):

Введіть початок інтервалу a: 1
Введіть кінець інтервалу b: 15
Введіть кількість елементів масиву n: 7
Згенерований масив: 1 1 2 3 5 1 8 
Останнє мінімальне число Фібоначчі: 1 з індексом 5

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

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

Варіант 1

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

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

Варіант 2

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

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

Варіант 3

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

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

Варіант 4

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

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

Варіант 5

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

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

Варіант 6

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

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

Варіант 7

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

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

Варіант 8

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

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

Варіант 9

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

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

Варіант 10

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

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

Варіант 11

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

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

Варіант 12

Напишіть функцію з прототипом int IndMax (int* arr, int n), яка серед чисел масиву які починаються на цифру 2 знаходить індекс першого максимального елемента. Для обчислення першої цифри числа використовувати функцію FirstDig.

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

Варіант 13

Напишіть функцію з прототипом int IndMin (int* arr, int n), яка серед чисел масиву які починаються на цифру 1 знаходить індекс останнього мінімального елемента. Для обчислення першої цифри числа використовувати функцію FirstDig

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

Варіант 14

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

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

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

Варіант 15

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

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

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

Варіант 16

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

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

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

Варіант 17

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

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

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

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