Добавил(а) Administrator
|
05.11.23 08:16 |
Папка з матеріалами
Телерам група
https://t.me/+Hq9oWZjlKvlmYzky |
Формули обчислювальної геометрії |
|
|
|
Добавил(а) Administrator
|
07.12.11 12:54 |
Формули обчислювальної геометрії
Визначення площі довільного многокутника За заданими координатами вершин многокутника визначити його площу. Для обчислення площі можна використати формулу: Перевірка многокутника на опуклість { Зчитування координат вершин многокутника} assign(f,'input.txt'); reset(f); readln(f,n); for i:=1 to n do readln(f,x[i],y[i]); close(f); {Визначення координат векторів} x[n+1]:=x[1]; y[n+1]:=y[1]; for i:=1 to n do begin a[i]:=x[i+1]-x[i]; b[i]:=y[i+1]-y[i]; end; {Підрахунок кількості додатних добутків} a[n+1]:=a[1]; b[n+1]:=b[1]; k:=0; for i:=1 to n do if a[i]*b[i+1]-a[i+1]*b[i]>=0 then k:=k+1; {Виведення результату} assign(f,'output.txt'); rewrite(f); if (k=n)or(k=0) then writeln(f,'yes') else writeln(f,'no'); close(f);
Належність точки прямій
(x-x1)/(x2-x1)=(y-y1)/(y2-y1) (x-x1)* (y2-y1) =(y-y1)* (x2-x1)
p:=false; if (x-x1)* (y2-y1) -(y-y1)* (x2-x1)=0 then p:=true;
Перетин прямих
(x-x1)/(x2-x1)=(y-y1)/(y2-y1) (x-x1)* (y2-y1) =(y-y1)* (x2-x1)
(x-x3)/(x4-x3)=(y-y3)/(y4-y3) (x-x3)* (y4-y3) =(y-y3)* (x4-x3)
1) x=(y-y1)*(x2-x1)/(y2-y1)+x1 (x-x3)* (y4-y3) =(y-y3)* (x4-x3)
((y-y1)*(x2-x1)-(x3-x1)*(y2-y1))*(y4-y3)=(y-y3)*(x4-x3)*(y2-y1) (y-y1)*(x2-x1)*(y4-y3)-(y-y3)*(x4-x3)*(y2-y1)=(x3-x1)*(y2-y1)*(y4-y3) y((x2-x1)*(y4-y3)-(x4-x3)*(y2-y1))= (x3-x1)*(y2-y1)*(y4-y3)+y1*(x2-x1)*(y4-y3)-y3*(x4-x3)*(y2-y1)
y=((x3-x1)*(y2-y1)*(y4-y3)+y1*(x2-x1)*(y4-y3)-y3*(x4-x3)*(y2-y1))/ ((x2-x1)*(y4-y3)-(x4-x3)*(y2-y1))
2) y=(x-x1)*(y2-y1)/(x2-x1)+y1 (y-y3)* (x4-x3) =(x-x3)* (y4-y3)
((x-x1)*(y2-y1)-(y3-y1)*(x2-x1))*(x4-x3)=(x-x3)*(y4-y3)*(x2-x1) (x-x1)*(y2-y1)*(x4-x3)-(x-x3)*(y4-y3)*(x2-x1)=(y3-y1)*(x2-x1)*(x4-x3) x((y2-y1)*(x4-x3)-(y4-y3)*(x2-x1))= (y3-y1)*(x2-x1)*(x4-x3)+x1*(y2-y1)*(x4-x3)-x3*(y4-y3)*(x2-x1)
x=((y3-y1)*(x2-x1)*(x4-x3)+x1*(y2-y1)*(x4-x3)-x3*(y4-y3)*(x2-x1))/ ((y2-y1)*(x4-x3)-(y4-y3)*(x2-x1)) Перетин відрізків: if (x1<=x2)and(x>=x1)and(x<=x2) then p:=true; if (x2<=x1)and(x>=x2)and(x<=x1) then p:=true; Перетин відрізків var x1,y1,x2,y2,x3,y3,x4,y4,x,y:real; p:boolean; begin clrscr; writeln('x1,y1'); readln(x1,y1); writeln('x2,y2'); readln(x2,y2); writeln('x3,y3'); readln(x3,y3); writeln('x4,y4'); readln(x4,y4); p:=false; if (((x2-x1)*(y4-y3)-(x4-x3)*(y2-y1))<>0) and (y2-y1<>0) then begin y:=((x3-x1)*(y2-y1)*(y4-y3)+y1*(x2-x1)*(y4-y3)-y3*(x4-x3)*(y2-y1))/((x2-x1)*(y4-y3)-(x4-x3)*(y2-y1)); x:=(y-y1)*(x2-x1)/(y2-y1)+x1; p:=true; end;
{if p then writeln(x:2:2,' ',y:2:2);}
p:=false; if (((y2-y1)*(x4-x3)-(y4-y3)*(x2-x1))<>0)and (x2-x1<>0)then begin x:=((y3-y1)*(x2-x1)*(x4-x3)+x1*(y2-y1)*(x4-x3)-x3*(y4-y3)*(x2-x1))/ ((y2-y1)*(x4-x3)-(y4-y3)*(x2-x1)); y:=(x-x1)*(y2-y1)/(x2-x1)+y1; p:=true; end;
if p then begin p:=false; if (x1<=x2)and(x>=x1)and(x<=x2) then p:=true; if (x2<=x1)and(x>=x2)and(x<=x1) then p:=true; end;
if p then writeln(x:2:2,' ',y:2:2); end.
Задача 1. Рух автомобіля Маршрут руху автомобіля заданий у вигляді координат вершин ламаної. Необхідно визначити кількість лівих поворотів. Автомобіль починає рух першої вершини ламаної.
Задача 2. Едемський сад Едемський сад складається з N фруктових дерев, розміщення яких задано координатами (Xi,Yi), а їх врожайності, відповідно, дорівнюють Ui, i=1,2,...,N. Садівник обгородив сад огорожею мінімальної довжини. Розробити програму, яка виводить на екран план Едемського саду, на якому ілюструється взаємне розміщення огорожі і дерев. При цьому: 1. Забезпечити можливість введення початкових даних як з клавіатури, так і з файлу EDEM.GOD, і відображати їх на дисплеї у вигляді плану Едемського саду (врахувати, що перший запис файлу EDEM.GOD вміщує значення N, а в кожному з наступних N записів вміщуються по три числа - Xi, Yi і Ui, де 1? i ? N, N ? 20; числа в кожному записі розділені пропусками. (5 балів). 2. Забезпечити можливість діалогу редагування початкових даних з синхронним відображенням результатів редагування на плані Едемського саду. (5 балів). 3. Обчислювати і виводити на дисплей врожайність всього саду. (5 балів). 4. Обчислювати і виводити на дисплей максимальну відстань між деревами саду. (5 балів). 5. Обчислювати і виводити на дисплей мінімальну відстань між сусідніми деревами саду. (5 балів). 6. Визначати кількість рогів в найкоротшій огорожі. (12 балів). 7. Обчислювати і виводити на дисплей периметр огорожі саду. (10 балів). 8. Обчислювати і виводити на дисплей площу обгородженого саду. (10 балів). 9. Автоматично наносити на план саду найкоротший маршрут, додержуючись якого, можна обійти всі дерева і повернутися до місця старту, обчислювати відстань за цим маршрутом. (12 балів). 10. Динамічно відображати на плані обхід Едемського саду садівником вздовж знайденого найкоротшого маршруту. (10 балів)
|
|
Олімпіада з програмування для студентів 1-го курсу, випускників шкіл та коледжів |
|
|
|
Добавил(а) Administrator
|
21.10.11 11:29 |
Олімпіада з програмування для студентів 1-го курсу, випускників шкіл та коледжів
Олімпіада відбуватиметься в три тури:
Перший тур - заочний, за допомогою системи online-тестування 29 жовтня 2011 року.
Другий тур - очний - грудень 2011 року.
Третій тур - конкурс творчих робіт - березень 2012 року.
Перший тур
Для участі в першому турі олімпіади необхідно з 17 по 28 жовтня 2011 р. зареєструватися за адресою olimpiа
Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра.
, вказавши прізвище, ім'я, по-батькові, місто, школу або ВНЗ, клас або групу та e-mail. Після реєстрації на електронну скриньку учасника будуть надіслані логін і пароль.
Мови програмування - Паскаль (компілятор FreePascal) або Сі (компілятор gcc).
Щоб учасники олімпіади опанували систему тестування, з 20 жовтня за адресою http://ejudge.lp.edu.ua/cgi-bin/register будуть розміщені пробні задачі. Інструкція для користувачів знаходиться за адресою http://iknit.lp.edu.ua/files/ejudge.pdf . З питаннями щодо роботи системи просимо звертатись за адресою olimpiа
Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра.
.
Перший тур олімпіади відбудеться 29 жовтня з 9.00 до 18.00 через систему тестування http://ejudge.lp.edu.ua/cgi-bin/register . Ознайомитись з олімпіадними задачами та розпочати виконання можна у будь-який момент вказаного проміжку. О 18.00 система тестування припинить свою роботу і буде сформовано підсумкову таблицю.
Результати першого туру будуть розміщені з 1 листопада на сайті http://iknit.lp.edu.ua .
Переможці першого туру допускаються до участі у другому та третьому турах. Запрошення до участі у другому турі будуть розіслані на електронні скриньки до 10 листопада.
Переможці другого та третього турів нагороджуються цінними призами.
Другий тур
Проводитиметься в очній формі на робочих місцях у Національному університеті «Львівська політехніка» на базі системи online-тестування. Виконання олімпіадних задач має здійснюватися за допомогою мов програмування Паскаль (компілятор FreePascal) або Сі (компілятор gcc).
Третій тур
Передбачає виконання творчого завдання на одну із запропонованих тем:
розроблення комп'ютерних ігор,
розроблення сайту олімпіади,
розроблення символіки для задач інформаційних технологій.
Партнери олімпіади - компанії-розробники програмного забезпечення:
SoftServe, Eleks, Stek, Lohika, Epam Systems, Global Logic.
Оргкомітет
Голова оргкомітету - Медиковський Микола Олександрович, директор Інституту комп'ютерних наук та інформаційних технологій Національного університету «Львівська політехніка».
Відповідальний секретар - Цимбал Юрій Вікторович, доцент кафедри автоматизованих систем управління Національного університету «Львівська політехніка», роб. тел. (032) 258-26-47, e-mail:
Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра.
. |
Задачі для самостійного опрацювання 2011-2012 н.р (рівень 2) |
|
|
|
Добавил(а) Administrator
|
07.12.11 13:01 |
Задачі для самостійного опрацювання 2011-2012 н.р (рівень 2)
Завдання розв’язати до 23.12.2011 та надіслати на електронну адресу
Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра.
Задача 1. (20 балів) При змаганні по спортивному орієнтуванні учаснику потрібно пройти N (N£10000) контрольних точок. При проходженні кожної наступної точки, пристрій фіксує її положення, як зміну по горизонталі і вертикалі по відношенню до попередньо пройденої точки, ціле число в межах [-10000;10000] .
Знайти відстань, яку пройде учасник з початкової точки в N-ту точку. Кожну відстань учасник проходить по найкоротшій відстані. Вхідні дані містяться у файлі REFI.DAT. В першому рядку ціле число N – кількість контрольних точок. В наступних N рядках містяться по два цілих числа, розділених пропуском. Результат вивести у файл REFI.SOL у вигляді рядка, який містить дійсне число з двома знаками після коми. Приклад. REFI.DAT 4 3 4 2 0 0 -4 -2 0 REFI.SOL 13.00
Задача 2. (30 балів) За попередньою умовою знайти відстань, яку пройшов учасник, якщо він повернувся в початкову точку, з якої відбувся старт. Приклад. REFI.DAT 4 3 4 2 0 0 -4 -2 0 REFI.SOL 16.00
Задача 3. (50 балів) Результати учасників змагання з спортивного орієнтування задаються трійкою цілих чисел: його стартовим номером та кількістю хвилин і секунд. Написати програму читання результатів учасників і друкування їх у порядку неспадання часу на кожній контрольній точці. Вхідні дані містяться в файлі START.DAT: 1 рядок: кількість учасників N; 2 рядок: кількість контрольних точок M; N*M рядків: номер, хвилини, секунди. Результат вивести у файл FINISH.SOL у вигляді послідовності рядків з стартових номерів для кожної контрольної точки. Наприклад. START.DAT 3 2 12 10 20 20 5 20 12 8 25 20 14 20 12 1 20 20 0 20 FINISH.SOL
20 12 12 20 20 12
|
|