You are on page 1of 4

Лабораторна робота 1-1.

Точка та контур
Умова задачі
Версія 1 («точка та зафіксований контур»)
Визначити, чи лежить точка площини всередині контуру, на контурі, або зовні його. Контур (див. варіанти нижче)
задається параметром a = 10, точка – парою дійсних координат (x, y). Вхідні дані, а саме, пару координат точки, задає
користувач за допомогою клавіатури.
Вимоги до виконання
1. Програма складається з шести функцій – головної та п’яти допоміжних:
 виведення даних про автора aboutA,  визначення розташування whereP,
 введення точки getP,  обробки точки processP.
 виведення точки putP,
2. У головній функції означено змінні для параметра контуру та координат точки. Головна функція містить
виклики функцій aboutA, getP, processP.
3. Функція aboutA (без параметрів) виводить у першому рядку назву роботи, у другому номер групи, прізвище та
ім’я автора програми через пробіл.
4. Функція getP має два параметри-посилання, за допомогою яких передає дійсні координати точки. Повертає
ознаку успішного введення координат.
5. Функція putP виводить координати точки у вигляді (x;y).
6. Функція whereP повертає ознаку розташування –1, 0, або 1, якщо, відповідно, точка всередині контуру, на
контурі, або за межами контуру.
7. Функція processP викликає функцію putP, функцію whereP, виводить одне з повідомлень IN_C, ON_C, OUT_C
(«всередині контуру», «на контурі», «за межами контуру») та значення параметра контуру.
8. На початку програми записати прототипи функцій, далі головну функцію, далі – решту функцій.
9. Програма здається разом з фото аркуша паперу в клітинку (або файлом із векторною чи точковою графікою),
який містить рисунок з контуром та точками, на яких студент перевіряв роботу програми, а також табличку, в якій
записано координати цих точок та відповідні їм вихідні дані, які має виводити програма.
Програми, в яких є глобальні змінні або які не виводять запрошень до введення або виводять повідомлення,
відмінні від зазначених, будуть відправлятися на доробку! Це саме стосується й подальших версій.
Варіанти контуру
Контур є багатокутником, заданим координатами його послідовних вершин.
1. Квадрат: (0,0), (a,0), (a,a), (0,a). 32. Опуклий 5-кутн.: (a,0), (2a,a), (2a,2a), (0,2a), (0,a).
2. Квадрат: (–a,–a), (a,–a), (a,a), (–a,a). 33. Опуклий 5-кутн.: (–a,0), (0,–a), (a,0), (a,a), (0,a).
3. Квадрат: (a,0), (a,2a), (–a,2a), (–a,0). 34. Опуклий 5-кутн.: (0,0), (a,0), (2a,a), (a,2a), (0,a).
4. Прямокутник: (–a,0), (a,0), (a,a), (–a,a). 35. Опуклий 5-кутн.: (a,0), (2a,0), (2a,a), (a,2a), (0,a).
5. Прямокутник: (0,–a), (a,–a), (a,a), (0,a). 36. Опуклий 5-кутн.: (0,0), (a,–a), (2a,0), (2a,a), (a,a).
6. Прямокутник: (0,0), (a,0), (a,2a), (0,2a). 37. Неоп. 5-кутн.: (0,0), (2a,0), (2a,2a), (a,a), (0,2a).
7. Квадрат: (0,–a), (a,0), (0,a), (–a,0). 38. Неоп. 5-кутн.: (0,0), (a,a), (2a,0), (2a,2a), (0,2a).
8. Квадрат: (a,0), (2a,a), (a,2a), (0,a). 39. Неоп. 5-кутн.: (0,0), (a,a), (2a,0), (2a,2a), (0,2a).
9. Квадрат: (0,0), (a,a), (0,2a), (–a,a). 40. Неоп. 5-кутн.: (a,0), (0,a), (a,2a), (–a,2a), (–a,0).
10. Трикутник: (0,0), (a,0), (0,a). 41. Неоп. 5-кутн.: (0,0), (0,–a), (a,0), (0,a), (–a,0).
11. Трикутник: (–a,0), (a,0), (0,a). 42. Неоп. 5-кутн.: (0,0), (a,a), (0,a), (0,2a), (–a,a).
12. Трикутник: (0,0), (a,0), (a,a). 43. Неоп. 5-кутн.: (0,0), (a,a), (0,2a), (–a,a), (0,a).
13. Трикутник: (0,–a), (a,0), (0,a). 44. Неоп. 5-кутн.: (a,0), (2a,a), (a,2a), (a,a), (0,a).
14. Трикутник: (0,0), (a,a), (–a,a). 45. Неоп. 6-кутн.: (0,0),(0,a), (–a,a), (–a,–a), (a,–a), (a,0).
15. Трикутник: (0,0), (2a,0), (a,a). 46. Неоп. 6-кутн.: (0,0),(0,–a), (a,–a), (a,a), (–a,a), (–a,0).
16. Трикутник: (0,a), (a,0), (a,2a). 47. Неоп. 6-кутн.: (a,a), (a,0), (2a,0) (2a,2a), (0,2a), (0,a).
17. Трикутник: (–a,0), (a,0), (a,2a). 48. Неоп. 6-кутн.: (0,0), (2a,0) (2a,a), (a,a), (a,2a), (0,2a).
18. Трапеція: (0,–a), (a,0), (a,a), (0,a). 49. Неоп. 6-кутн.: (0,0), (2a,0) (2a,2a), (a,2a), (a,a), (0,a).
19. Трапеція: (0,0), (2a,0), (a,a), (0,a). 50. Опукл. 6-кутн.: (–a,–a), (0,–a), (a,0) (a,a), (0,a), (–a,0).
20. Трапеція: (0,0), (a,0), (2a,a), (0,a). 51. Опукл. 6-кутн.: (0,0),(a,0), (2a,a), (2a,2a), (a,2a), (0,a).
21. Трапеція: (a,0), (a,2a), (0,2a), (0,a). 52. Опукл. 6-кутн.: (a,0), (2a,0), (2a,a), (a,2a), (0,2a), (0,a).
22. Трапеція: (–2a,0), (2a,0), (a,a), (–a,a). 53. Опукл.6-кут.: (0,0),(a,–a), (2a,0), (2a,2a), (a,3a), (0,2a).
23. Трапеція: (–a,0), (a,0), (2a,a), (–2a,a). 54. Опукл.6-кут.: (0,0), (2a,0), (3a,a), (2a,2a), (0,2a), (–a,a).
24. Трапеція: (0,0), (3a,0), (2a,a), (a,a). 55. Неоп.6-кутн.: (0,0), (0,–a), (a,0), (a,a), (0,a), (–a,0).
25. Опукл. 5-кутн.: (0,0), (2a,0), (2a,a), (a,2a), (0,2a). 56. Неоп.6-кутн.: (a,0), (2a,a), (2a,2a), (a,2a), (0,a), (a,a).
26. Опукл. 5-кутн.: (a,0), (2a,0), (2a,2a), (0,2a), (0,a). 57. Неоп.6-кутн.: (0,0), (a,a), (a,2a), (0,a), (–a,a), (–a,0).
27. Опукл. 5-кутн.: (0,–a), (a,–a), (a,a), (–a,a), (–a,0). 58. Неоп.6-кутн.: (0,0), (a,–a), (a,0), (0,a), (–a,a), (–a,0).
28. Опукл. 5-кутн.: (0,0), (2a,0), (2a,2a), (a,2a), (0,a). 59. Неоп.6-кутн.: (0,–a), (a,0), (a,a), (0,0), (–a,a), (–a,0).
29. Опуклий 5-кутн.: (–a,–a), (a,–a), (a,0), (0,a), (–a,0). 60. Неоп.6-кутн.: (0,0), (a,a), (0,a), (–a,0), (0,–a), (a,–a).
30. Опуклий 5-кутн.: (–a,0), (a,0), (a,a), (0,2a), (–a,a). 61. Неоп.6-кутн.: (0,a), (a,0), (a,a), (0,2a), (–a,a), (–a,0).
31. Опуклий 5-кутн.: (–a,0), (0,–a), (a,–a), (a,a), (0,a).
Версія 2 («контур і точки»)
Отримати від користувача розмір контуру та послідовність точок. Для кожної точки визначити її розташування
відносно контуру та вивести повідомлення як у версії 1.
Користувач має задавати значення параметра контуру, поки воно не стане допустимим, тобто додатним. Якщо
замість того, щоб увести значення, користувач натискає на клавіші, після яких не можна отримати число, а потім на
Enter, тобто додатне значення не отримано, то програма повідомляє про це й завершується. Якщо користувач увів
додатне значення параметра контуру, то далі по одній вводяться та обробляються точки (визначається їх
розташування). Ознака закінчення роботи з точками – замість уведення координати натиснуто на клавіші, після яких
не можна утворити число, а потім на Enter.
Вимоги до виконання
1. Додати функцію getCont. Вона повертає ознаку, чи отримано від користувача додатне значення параметра
контуру. Саме це значення передається з її виклику за допомогою параметра-посилання.
2. Додати функцію обробки контуру processCont, параметром якої є параметр контуру. Вона в циклі викликає
функції введення координат точки, обробки точки та виведення результатів обробки. У разі неуспішного введення
точки вона виводить повідомлення <<<END OF POINTS>>> і закінчує свою роботу.
3. Якщо додатне значення параметра контуру не отримано, то головна функція виводить повідомлення
<<<CONTOUR IS ABSENT>>>, інакше викликає функцію обробки контуру. У головній функції тепер відсутнє
поняття «точка». Перед закінченням роботи головна функція виводить в окремому рядку повідомлення
<<<END OF WORK>>>.
4. Параметрами функцій обробки точки processP та визначення розташування whereP мають бути параметр
контуру та координати точки.
5. Додати функцію виведення результатів обробки точки putResult. Вона отримує параметр контуру, координати
точки та ознаку розташування точки й виводить в одному рядку повідомлення про розташування точки.
6. Функція обробки точки processP змінюється: замість виводити повідомлення вона передає дані для виведення у
виклику putResult.

Версія 3 («контур, точки й відстані»)


Як і у версії 2, програма отримує від користувача та обробляє розмір контуру та послідовність точок. Проте тепер
для кожної точки треба ще обчислити відстань від точки до контуру (найменшу з відстаней від точки до точок
контуру) та вивести повідомлення про розташування точки та відстань до контуру.
Якщо замість того, щоб увести число, користувач натискає на клавіші, після яких не можна отримати число, а
потім на Enter, то програма має пропустити символи до кінця набраного рядка й продовжити роботу. Ознака
закінчення роботи з точками – повторення попередньої точки.
Вимоги до виконання
1.Додати функцію distPC, яка обчислює й повертає відстань від точки до контуру. Вона може містити виклик
функції whereP.
2.Додати функцію отримання дійсного числа getDouble, яка повертає дійсне значення, введене користувачем. Якщо
замість того, щоб увести число, користувач натискає на клавіші, після яких не можна отримати число, а потім на
Enter, то вона має пропустити символи до кінця набраного рядка й продовжити роботу.
3.Змінити функції getCont і getP так, щоб вони для отримання дійсних чисел викликали функцію getDouble. Тепер
з їх викликів може повернутися тільки .
4.Змінити функцію обробки контуру processCont: вона виводить повідомлення <<<END OF POINTS>>> і закінчує
свою роботу, якщо повторена попередня точка.
5.Параметрами функцій обробки точки processP, визначення розташування whereP та обчислення відстані distPC
мають бути параметр контуру та координати точки.
6.Змінити функцію виведення результатів обробки точки putResult. У виклику їй передаються параметр контуру,
координати точки, ознака розташування точки та відстань від контуру до точки. Вона виводить у першому рядку, як і
раніше, повідомлення про розташування точки й у другому рядку слово DISTANCE= та відстань.
7.Програма здається разом з зображенням контуру та точками, на яких студент перевіряв роботу програми, а також
табличку, в якій записано розмір контуру, координати точок та їхні відстані до контуру.

===================================================================

Версія 4 («перехоплення винятків від функції введення»)


Як і у версії 2, задається контур і декілька точок, проте робота припиняється тільки після натискання Ctrl-C.
Якщо параметр контуру не введено, наприклад, через сторонні символи, які не задають число, то програма виводить
повідомлення <<<WRONG DATA>>> та повертає користувача до введення параметра контуру. Після того, як отримано
додатний параметр контуру, програма вводить і обробляє точки. Якщо введення точки неуспішне, то програма
виводить повідомлення <<<WRONG DATA>>> й повертає користувача до введення точки.
Вимоги до виконання
1. Додати функцію введення дійсного числа inputD без параметрів, яка запрошує до введення дійсного числа та
повертає введене дійсне число, або, в разі помилкових даних, виводить повідомлення <<<WRONG DATA>>> й кидає
виняток цілого типу.
2. Додати функцію отримання дійсного числа getDouble, яка повертає дійсне значення, отримане з виклику
функції inputD. Якщо у виклику getDouble з’являється виняток типу int, то вона перехоплює його, відновлює
працездатність потоку введення та повторює виклик функції inputD.
3. Переробити функцію введення параметра контуру getCont, не змінюючи її заголовок з версії 2. Вона отримує
дійсне значення від виклику функції getDouble і повертає користувача до введення, якщо це значення від’ємне. З її
виклику може повернутися тільки true, а значення параметра контуру після її виклику додатне.
4. Переробити функцію введення точки getP, не змінюючи її заголовок з версії 2. Вона отримує два дійсних
значення від функції getDouble та повертає true.
5. На відміну від попередніх версій, повідомлення <<<CONTOUR IS ABSENT>>> і <<<END OF WORK>>> відсутні.
==== ДАЛІ НЕ ЧИТАТИ ====
Версія 4 («багато контурів – багато точок»)
Як і у версії 3, задається контур і декілька точок, проте після повторення точки робота не закінчується. Вводиться
значення параметра, яке визначає наступний контур, і все повторюється. На відміну від версії 3, введення точки може
не бути успішним – тоді припиняється робота з поточним контуром. Умови закінчення всієї роботи такі самі, як у
версії 3.
Вимоги до виконання
1. Переробити функцію введення точки getPoint – вона має повертати ознаку того, що точку успішно введено.
2. Переробити функцію обробки контуру – в разі неуспішного введення точки вона виводить повідомлення
<<<POINT IS ABSENT>>> і закінчує обробку поточного контуру.
3. Після відмови користувача від уведення контуру (Ctrl-Z і Enter) на екрані з’являються тільки повідомлення
<<<CONTOUR IS ABSENT>>> і <<<END OF WORK>>>, і ніяких інших.

You might also like