КУРСОВА РОБОТА
з дисципліни«Алгоритми та структури даних»
на тему:
«Розв’язування олімпіадних задач з програмування з
використанням алгоритмів обчислювальної геометрії»
студента 2 курсу KN1-B22 групи
спеціальності 122 Комп’ютерні науки
Демченка Дмитра Володимировича
Керівник: асистент кафедри комп’ютерних наук,
Понеділок Ірина Сергіївна
2.
Завдання курсової роботи
Вивчити теоретичні засади алгоритмів обчислювальної геометрії.
Проаналізувати та класифікувати типові олімпіадні задачі, які можна вирішувати за допомогою
алгоритмів обчислювальної геометрії.
Розробити програмні рішення для вибраних олімпіадних задач, використовуючи алгоритми
обчислювальної геометрії.
Зробити висновки про ефективність та обмеження використаних алгоритмів у контексті олімпіадних
завдань з програмування.
3.
2.1 Умова задачі.
Визначитив скількох точках перетинаються два кола.
Вхідні дані
6 чисел x1, y1, r1, x2, y2, r2, де x1, y1, x2, y2 – координати центрів кіл, r1, r2 –
їх радіуси. Всі числа - дійсні, не перевищують 1000000000 за модулем, та
задані не більш ніж з 3 знаками після коми.
Вихідні дані
Виведіть одне число, кількість точок перетину. Якщо кількість точок безліч
виведіть −1
2.3 Блок-схема задачі.
ПРАКТИЧНА ЧАСТИНА
4.
ПРАКТИЧНА ЧАСТИНА
2.4 Реалізаціяалгоритму в середовищі програмування.
Ці рядки включають в код потрібні бібліотеки. <iostream> використовується для вводу-виводу даних, а
<cmath> містить математичні функції, такі як sqrt і abs, які нам потрібні для цього коду.
Починається визначення головної функції main, яка є точкою входу для виконання програми.
У цьому рядку оголошуються змінні для збереження координат і радіусів двох кіл: x1, y1, r1 для першого
кола і x2, y2, r2 для другого кола. Використовується std::cin для зчитування цих значень зі стандартного
вводу (зазвичай клавіатура).
Оголошується змінна v, яка буде зберігати результат обчислень.
5.
Цей рядок починаєблок if-else. Він перевіряє, чи координати та радіуси двох кіл однакові. Якщо так, то v встановлюється в -1 (означаючи, що
кола ідентичні), інакше продовжується виконання блоку else.
У цьому рядку розраховується відстань h між центрами двох кіл за допомогою формули відстані між двома точками в евклідовій геометрії.
Функція std::sqrt використовується для обчислення квадратного кореня.
Ця частина коду перевіряє різні умови для визначення, в скількох точках перетинаються кола. Якщо вони дотикаються одне до одного ззовні
або всередині, v встановлюється в 1. Якщо кола не мають спільних точок, v встановлюється в 0. У інших випадках, кола перетинаються в двох
точках, v встановлюється в 2.
6.
Цей рядок виводитьзначення v на стандартний вивід (консоль).
Завершення функції main та програми. Вираз return 0; позначає успішне завершення
програми, де 0 - код завершення, який показує, що програма завершилася без помилок.
7.
РОЗДІЛ 2. ПРАКТИЧНАЧАСТИНА
2.5 Результати виконання програми.
Для прикладу, використаємо такі вхідні дані:
x1 = 0, y1 = 0, r1 = 5
x2 = 5, y2 = 0, r2 = 1
Як бачимо, алгоритм виконав свою роботу і
вивів число 2, яке означає, що кола
перетинаються в 2-х точках. Якщо підставити
вхідні дані в перевірки, які використовуються
у програмному коді, можна побачити, що
жодна з перевірок не виконується. Звідси
можна зробити висновок, що кола
перетинаються 2-х точках.
8.
РОЗДІЛ 2. ПРАКТИЧНАЧАСТИНА
2.5 Результати виконання програми.
Далі використаємо такі вхідні
дані:
x1 = 5, y1 = 6, r1 = 4
x2 = 5, y2 = 6, r2 = 4
Можемо побачити, що координати
кіл однакові, тобто х1=х2, у1=у2,
r1=r2. Ми бачимо цифру -1, яка
виводиться після виконання
програми. Звідси можна зробити
висновок, що кола ідентичні.
9.
2.6 Умова задачі.
Наплощині задані два прямокутники координатами кінців
однієї з діагоналей. Сторони прямокутників паралельні
осям координат. Знайти площу спільної частини
прямокутників.
Вхідні дані:
Перший рядок – X[1], Y[1], X[2], Y[2] – значення
координат кінців діагоналі одного прямокутника. Другий
рядок - значення X[3], Y[3], X[4], Y[4] – іншого
прямокутника. Всі значення цілі числа
Вихідні дані:
Єдине число – площа спільної частини прямокутників,
округлена до трьох знаків після коми.
2.8 Блок-схема задачі.
РОЗДІЛ 2. ПРАКТИЧНА ЧАСТИНА
10.
РОЗДІЛ 2. ПРАКТИЧНАЧАСТИНА
2.9 Реалізація алгоритму в середовищі програмування.
11.
РОЗДІЛ 2. ПРАКТИЧНА
ЧАСТИНА
2.10Результати виконання програми.
Наприклад, візьмемо такі вхідні дані:
x1 = 1, y1 = 1, x2 = 5, y2 = 5
x3 = 2, y3 = 2, x4 = 3, y4 = 3
Зробимо перевірку вручну. Для цього нам потрібно знайти X5 яке дорівнює
максимальному з мінімальних значень пар X1, X2 та X3, X4 в даному випадку X1 = 1, X2 =
5, Х3 = 2, Х4 = 3.
В даному випадку в парі X1 та X2 мінімальним є X1, тобто 1, а в парі X3 та X4
мінімальним є X3, тобто 2. Далі ми обираємо максимальне серед цих двох значень, тобто
X5 = 2. За тим самим принципом рахуємо Y5. Він дорівнює 2
Щоб взнати X6, нам потрібно взяти мінімальне значення серед максимальних значень
пар X1, X2 та X3, X4 в нашому випадку це 5 і 3. Звідси х6 дорівнює 3. За тим самим
принципом рахуємо y6, в нашому випадку він дорівнює 3
Отримаємо наступні дані:
Х5 = 2, Y5 = 2
Х6 = 3, Y6 = 3
Далі ми обчислюємо площу спільної частини прямокутників. Для цього нам потрібно
перемножити два вирази (X6 - X5) та (Y6 - Y5).
В нашому випадку ми отримаємо вираз 1 × 1 = 1
12.
Висновки
В ходівиконання курсової роботи були вивчені теоретичні засади алгоритмів, елементи блок-схем,
проаналізовані та класифіковані типові олімпіадні задачі, які можна вирішувати за допомогою
алгоритмів обчислювальної геометрії, розроблені програмні рішення для вибраних олімпіадних
задач, використовуючи алгоритми обчислювальної геометрії.
1)Алгоритми обчислювальної геометрії є ефективним інструментом для розв'язання олімпіадних
задач з програмування, які вимагають обробки геометричних даних.
2)Алгоритми обчислювальної геометрії дозволяють розв'язувати такі типові олімпіадні задачі, як:
•знаходження відстані між двома точками;
•знаходження перетину двох ліній;
•знаходження перетину двох площин;
•знаходження точки дотику двох кривих;
•знаходження площі многокутника.