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

Презентація до курсової роботи по програмуванню

  • 1.
    КУРСОВА РОБОТА з дисципліни«Алгоритми та структури даних» на тему: «Розв’язування олімпіадних задач з програмування з використанням алгоритмів обчислювальної геометрії» студента 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)Алгоритми обчислювальної геометрії дозволяють розв'язувати такі типові олімпіадні задачі, як:  •знаходження відстані між двома точками;  •знаходження перетину двох ліній;  •знаходження перетину двох площин;  •знаходження точки дотику двох кривих;  •знаходження площі многокутника.