1314Lab11_PointContour / 1314Lab11_PointContour
.docЛабораторна робота 1-1. Точка та контур
Версія 1
Умова задачі
Треба визначити, чи лежить точка площини всередині контуру, на контурі, або зовні його. Контур визначається параметром (додатним дійсним значенням a), точка – парою дійсних координат (x, y). Вхідні дані задаються користувачем за допомогою клавіатури (спочатку контур, потім точка). Якщо параметр контуру не є допустимим (додатним), програма виводить в окремому рядку екрана повідомлення WRONG PARAMETER і закінчує роботу.
Варіанти контуру
Контур, що є багатокутником, задано координатами його вершин.
-
Квадрат: (0,0), (a,0), (a,a), (0,a).
-
Квадрат: (–a,–a), (a,–a), (a,a), (–a,a).
-
Квадрат: (a,0), (a,2a), (–a,2a), (–a,0).
-
Прямокутник: (–a,0), (a,0), (a,a), (–a,a).
-
Прямокутник: (0,–a), (a,–a), (a,a), (0,a).
-
Прямокутник: (0,0), (a,0), (a,2a), (0,2a).
-
Квадрат: (0,–a), (a,0), (0,a), (–a,0).
-
Квадрат: (a,0), (2a,a), (a,2a), (0,a).
-
Квадрат: (0,0), (a,a), (0,2a), (–a,a).
-
Трикутник: (0,0), (a,0), (0,a).
-
Трикутник: (–a,0), (a,0), (0,a).
-
Трикутник: (0,0), (a,0), (a,a).
-
Трикутник: (0,–a), (a,0), (0,a).
-
Трикутник: (0,0), (a,a), (–a,a).
-
Трикутник: (0,0), (2a,0), (a,a).
-
Трикутник: (0,a), (a,0), (a,2a).
-
Трикутник: (–a,0), (a,0), (a,2a).
-
Трапеція: (0,–a), (a,0), (a,a), (0,a).
-
Трапеція: (0,0), (2a,0), (a,a), (0,a).
-
Трапеція: (–2a,0), (2a,0), (a,a), (–a,a).
-
Трапеція: (0,0), (a,0), (2a,a), (0,a).
-
Трапеція: (–a,0), (a,0), (2a,a), (–2a,a).
-
П’ятикутник: (0,0), (0,–a), (a,0), (0,a), (–a,0).
-
П’ятикутник: (–a,–a), (a,–a), (a,0), (0,a), (–a,a).
-
П’ятикутник: (0,0), (2a,0), (2a,a), (a,2a), (0,2a).
-
П’ятикутник: (a,0), (2a,0), (2a,2a), (0,2a), (0,a).
-
П’ятикутник: (–a,–a), (a,–a), (a,0), (0,a), (–a,a).
-
П’ятикутник: (–a,0), (a,0), (a,a), (0,2a), (–a,a).
-
П’ятикутник: (–a,0), (0,–a), (a,0), (a,a), (0,a).
-
П’ятикутник: (0,0), (2a,0), (2a,2a), (a,a), (0,2a).
-
П’ятикутник: (0,0), (a,0), (2a,a), (a,2a), (0,a).
-
Шестикутник: (0,0),(0,a), (–a,a), (–a,–a), (a,–a), (a,0).
-
Шестикутник: (0,0),(0,–a), (a,–a), (a,a), (–a,a), (–a,0).
-
Шестикутник: (a,a), (a,0), (2a,0) (2a,2a), (0,2a), (0,a).
-
Шестикутник: (0,0), (2a,0) (2a,a), (a,a), (a,2a), (0,2a).
-
Шестикутник: (0,0), (2a,0) (2a,2a), (a,2a), (a,a), (0,a).
-
Шестикутник: (–a,–a), (0,–a), (a,0) (a,a), (0,a), (–a,0).
-
Шестикутник: (0,0),(a,0), (2a,a), (2a,2a), (a,2a), (0,a).
-
Шестикутник: (0,0), (0,–a), (a,0), (a,a), (0,a), (–a,0).
-
Шестикутник: (a,0),(2a,a), (2a,2a), (a,2a), (0,a), (a,a).
-
Шестикутник: (0,0),(a,–a),(a,a),(0,2a), (–a,a), (–a,–a).
-
Шестикутник: (0,a),(a,0),(a,2a),(0,3a),(–a,2a),(–a,0).
-
Шестикутник: (0,0),(a,a),(2a,0),(2a,2a), (a,3a), (0,2a).
-
Шестикутник: (0,0),(a,a),(a,2a),(0,a), (–a,a), (–a,0).
-
Шестикутник: (0,0),(a,–a),(a,0),(0,a), (–a,a), (–a,0).
Вимоги до виконання
1. Програма має складатися з п’яти функцій. Головна функція містить оголошення змінних (це параметр контуру, точка й, можливо, інші) та виклики інших чотирьох функцій:
-
функція введення параметра контуру getCont,
-
функція введення точки getPoint,
-
функція визначення, як розташована точка відносно контуру wherePoint,
-
функція виведення результатів outResults.
2. Програми з глобальними змінними прийматися не будуть!
3. Функція getCont повертає дійсний параметр контуру. Якщо її виклик повернув від’ємне значення, то потрібно вивести повідомлення WRONG PARAMETER.
4. Функція wherePoint повертає одне з трьох значень, що відповідають розташуванню:
-
–1, якщо точка всередині контуру,
-
0, якщо на контурі,
-
1, якщо за межами контуру.
5. Функція outResults отримує ознаку розташування –1, 0, або 1 і виводить повідомлення, відповідно, IN_C, ON_C, OUT_C.
6. Функції введення повинні виводити відповідні запрошення до введення.
7. На початку програми записати прототипи всіх функцій, окрім головної, далі головну функцію, далі – решту функцій.
Версія 2 («відстань»)
Умова задачі
Обчислити відстань від точки до контуру (це найменша з відстаней від точки до точок контуру). Відстань від’ємна, якщо точка всередині контуру, і додатна, якщо за межами. Після повідомлення про розташування точки програма виводить відстань.
Вимоги до виконання
1. Додати функцію distPointCont, яка обчислює й повертає відстань від точки до контуру. Параметри-значення функції – параметр контуру, координати точки й, можливо, ціла ознака розташування точки відносно контуру.
2. Додати функцію outPoint, яка отримує координати точки й виводить їх у вигляді (x; y).
3. Додати функцію outCont, яка отримує параметр контуру й виводить його у вигляді [a].
4. Переробити функцію outResults: вона має виводити точку, повідомлення про розташування точки, параметр контуру, слово distance і відстань. Її параметри – координати точки, параметр контуру, ознака розташування й відстань.
5. Відповідно, переробити головну функцію.
Версія 3 («один контур – багато точок»)
Умова задачі
Користувач задає значення параметра контуру, поки воно не є допустимим. Якщо замість того, щоб увести наступне значення параметра, користувач натискає на клавіші Ctrl-Z і потім Enter, то в окремому рядку екрана програма виводить повідомлення <<<CONTOUR IS ABSENT>>> і закінчується. Якщо задано допустиме значення, то далі по одній вводяться й обробляються точки (визначається їх розташування й відстань). Ознака закінчення роботи з контуром – повторення попередньої точки. У цій ситуації в окрумому рядку екрана виводиться повідомлення <<<CONTOUR IS PROCESSED>>>.
Вимоги до виконання
1. Додати переозначену функцію введення параметра getCont. Вона має повертати ознаку того, що параметр контуру було введено, а сам параметр контуру повертати за допомогою свого параметра-посилання.
2. Додати функцію обробки контуру processCont, яка в циклі викликає функцію введення точки, функцію обробки точки й функцію виведення результатів. Параметр контуру має бути її єдиним параметром.
3. Відповідно, переробити головну функцію. Тепер поняття «точка» в ній відсутнє. Перед закінченням головна функція виводить в окремому рядку повідомлення END OF WORK.
Версія 4 («багато контурів – багато точок»)
Умова задачі
Як і у версії 3, задається контур і декілька точок. Проте, на відміну від версії 3, після повторення точки робота не закінчується. Вводиться значення параметра, яке визначає наступний контур, і все повторюється. Як і раніше, обробляються тільки додатні значення параметра контуру. Робота закінчується, коли користувач, замість того, щоб увести наступне значення параметра або наступну точку, натискає на клавіші Ctrl-Z і потім Enter. Якщо користувач у цей спосіб відмовляється від уведення точки, то в окремому рядку екрана виводиться повідомлення <<<END OF POINTS>>>, а якщо від параметра контуру – <<<CONTOUR IS ABSENT>>>. Як і раніше, перед закінченням головна функція виводить в окремому рядку повідомлення END OF WORK.
Вимоги до виконання
1. Після відмови користувача (Ctrl-Z і Enter) запрошень до введення не може бути.
2. Додати переозначену функцію введення точки getPoint – вона має повертати ознаку того, що точку введено, а самі координати – за допомогою параметрів-посилань.
3. Відповідно, переробити функцію обробки контуру.