OOP Course
Сьогодні

Підрозділ 2.15

Завдання з масивами

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

2.15. Завдання з масивами

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

Підрахунок пацієнтів із підвищеним артеріальним тиском

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

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

Тут hypertensionCount спочатку дорівнює нулю. На кожній ітерації foreach перевіряється умова bp >= 140. Якщо поточне значення тиску досягає або перевищує порогове — лічильник збільшується на одиницю. Після завершення циклу змінна містить шукану кількість.

Такий підхід легко адаптується до будь-якого діапазону: наприклад, щоб знайти вимірювання в межах норми (90–139), достатньо замінити умову на bp >= 90 && bp < 140.

Реверс масиву показників

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

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

Ключова ідея обміну: щоб переставити два значення, потрібна тимчасова змінна temp. Без неї перший запис знищив би одне зі значень: temps[i] = temps[n - i - 1] затерло б temps[i], і при виконанні наступної строки temps[n - i - 1] = temps[i] ми записали б вже нове (а не оригінальне) значення. Саме тому спочатку зберігаємо temps[i] у temp, потім перезаписуємо temps[i], і лише потім копіюємо temp на місце temps[n - i - 1].

Якщо довжина масиву непарна (наприклад, 7 елементів), центральний елемент з індексом 3 залишається на місці — він сам собі пара, а цикл до нього не доходить (k = 3, отже i дорівнює 0, 1, 2).

Сортування масиву методом бульбашки

Третє завдання — впорядкування масиву. Медична система часто потребує відсортованих показників: наприклад, щоб визначити мінімальне та максимальне значення тиску серед групи пацієнтів або виявити, хто перебуває у критичному стані.

Найпростіший для розуміння алгоритм — бульбашкове сортування (bubble sort): повторювані проходи масивом, при кожному з яких більший елемент «спливає» вправо, поступаючись місцем меншому. Назва пов'язана з тим, що великі значення, як бульбашки, поступово переміщуються до кінця.

Розберемо алгоритм детально. Зовнішній цикл for (int i = 0; i < bps.Length - 1; i++) послідовно вибирає кожен елемент, крім останнього — він стане найбільшим сам по собі після проходів. Внутрішній цикл for (int j = i + 1; j < bps.Length; j++) починається з наступного після i елемента і порівнює обраний елемент bps[i] з кожним іншим праворуч від нього. Якщо bps[i] > bps[j] — більший елемент ліворуч, і їх треба поміняти місцями. Обмін виконується через тимчасову змінну temp — за тим самим принципом, що й у задачі з реверсом.

Після завершення сортування масив впорядкований за зростанням. Мінімальний елемент — bps[0], максимальний — bps[^1] (останній елемент через оператор ^).

Бульбашкове сортування простіше для початкового розуміння, але не є найефективнішим для великих масивів. У промисловому коді для впорядкування застосовують методи Array.Sort() і Array.Sort(array, comparer), що реалізують більш ефективні алгоритми. Проте ручна реалізація сортування демонструє важливий алгоритмічний принцип: розбиття задачі на підзадачі за допомогою вкладених циклів.

Розроблено Tomka Yurii · © 2026 ·