Підсумки практичної роботи №10: Алгоритми опрацювання одновимірних масивів

Практична робота №10 присвячена застосуванню базових алгоритмів пошуку та фільтрації даних у масивах. Освоєння цих методів є першим кроком до розуміння того, як працюють великі системи аналітики та обробки великих даних (Big Data).

Мета роботи

Навчитися реалізовувати алгоритми пошуку екстремальних значень (максимуму та мінімуму) та фільтрації елементів масиву за визначеним критерієм.

Постановка завдання: Аналіз успішності класу

Для підсумку практичної роботи ми обрали задачу з реального сектору — автоматизацію обробки шкільного журналу. Програма має опрацювати список оцінок учнів та виконати три дії:

  1. Знайти найвищий бал (максимум).
  2. Знайти найнижчий бал (мінімум).
  3. Вивести список «боржників» (усі оцінки, що нижчі за 4 бали).

Алгоритм виконання та логіка розв’язання

Процес розв’язання задачі розбитий на логічні етапи, що відповідають принципам структурного програмування:

Етап 1: Підготовка даних

Ми ініціалізуємо масив оцінок. У реальних системах ці дані завантажуються з бази даних, але для практичної роботи ми вводимо їх вручну або генеруємо за допомогою випадкових чисел.

Етап 2: Пошук екстремумів (Метод чемпіона)

Для знаходження максимуму та мінімуму ми використовуємо послідовне порівняння. Ми припускаємо, що перший елемент масиву є одночасно і найбільшим, і найменшим. Під час перебору масиву в циклі ми порівнюємо кожен наступний елемент із нашим «чемпіоном». Якщо знайдено більше (або менше) значення — ми оновлюємо еталон.

Етап 3: Фільтрація за критерієм

Для виведення оцінок, що відповідають критерію «початковий рівень», ми використовуємо умовний оператор if всередині циклу. Кожен елемент, що проходить перевірку, додається до нового списку результатів.

Фінальний програмний код (Python)

Нижче наведено повну реалізацію завдання, яку було розроблено під час практичної роботи:

Python

# 1. Ініціалізація списку оцінок класу
marks = [7, 10, 3, 12, 5, 2, 8, 11, 4, 9]
print(f"Список оцінок класу: {marks}")

# 2. Пошук максимуму та мінімуму
max_mark = marks[0]
min_mark = marks[0]

# Використовуємо один цикл для обох пошуків (оптимізація O(n))
for m in marks:
    if m > max_mark:
        max_mark = m
    if m < min_mark:
        min_mark = m

# 3. Фільтрація за критерієм (оцінки нижче 4 балів)
debtors = []
for m in marks:
    if m < 4:
        debtors.append(m)

# 4. Виведення результатів аналізу
print("-" * 30)
print(f"Найвищий результат у класі: {max_mark}")
print(f"Найнижчий результат у класі: {min_mark}")
print(f"Кількість незадовільних оцінок: {len(debtors)}")
print(f"Оцінки боржників: {debtors}")

Висновки за результатами роботи

  1. Ефективність: Використання одного циклу для пошуку мінімуму та максимуму дозволяє обробити масив за один прохід ($O(n)$), що критично важливо для швидкодії великих систем.
  2. Універсальність: Описаний алгоритм працює незалежно від розміру масиву — він однаково ефективний як для 10 елементів, так і для 10 000.
  3. Безпека даних: Алгоритм лише зчитує дані, не змінюючи початковий масив, що дозволяє використовувати ці ж дані для інших розрахунків (наприклад, для середнього бала).

Контрольні запитання для самоперевірки

  • Чому не можна ініціалізувати змінну max_mark нулем, якщо в масиві можуть бути від’ємні числа?
  • Яка функція в Python дозволяє замінити ручний цикл для пошуку максимуму?
  • Як зміниться логіка програми, якщо нам потрібно знайти не лише саме значення, а й індекс (номер) найкращого учня?
,