Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursova.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
370.69 Кб
Скачать

2 Розробка програми виконання основного завдання

2.1 Розробка методу виконання основного завдання

Згідно з індивідуальним завданні потрібно виконати наступні завдання:

  1. Знайти довжину кожної сторони прямокутника.

  2. Визначити периметр і площу прямокутника.

  3. Визначити чи прямокутники перетинаються і чи вони вкладені.

В аналітичній геометрії відстань між двома точками A(x1, y1) і B(x2, y2) на площині можна знайти за формулою:

; (1)

де X1, Y1 та X2,Y2 - координати початку й кінця відрізка.

Якщо позначити  різницю  (x2 - x1) як  , а (y2 - y1) як  , формула набуває вигляду:

(2)

За допомогою рисунка 1 можна пояснити наступні дії над прямокутником .

Рисунок 1 – Зображення прямокутника

Периметр є сумою всіх сторін фігури. Знаючи довжину сторін прямокутника з формули (1) можемо обрахувати периметр:

P = 2 (AB + BC) (3)

Для знаходження площі (Рисунок 2) даної фігури необхідно помножити його довжину на ширину. Тобто AB множимо на BC:

S = AB*BC (4)

Рисунок 2 – Площа прямокутника

2.2 Структура даних та функцій

Клас RTG використовує такі функції: функція обрахунку периметра та площі, функція малювання, функція перевірки чи точки прямокутника всередині іншого прямокутника та функція перевірки чи прямокутники перетинаються.

struct TOC {

int x, y;

};

class RTG {

public:

RECT rt;

TOC *toc;

int S, P;

void calcRt();

void draw(HDC dc);

bool isIn(TOC & t);

bool isPeres(RTG * r);

RTG();

~RTG();

};

У функції void RTG::calcRt() знаходимо координати та обчислюємо за ними периметр і площу даного прямокутника:

void RTG::calcRt() {

rt.left=min(min(toc[0].x,toc[1].x),min(toc[2].x,toc[3].x));

rt.top=min(min(toc[0].y,toc[1].y),min(toc[2].y,toc[3].y));

rt.right=max(max(toc[0].x,toc[1].x),max(toc[2].x,toc[3].x));

rt.bottom=max(max(toc[0].y,toc[1].y),max(toc[2].y,toc[3].y));

S=(rt.right-rt.left)*(rt.bottom-rt.top);

P=((rt.right-rt.left)+(rt.bottom-rt.top))*2; }

Визначаємо чи прямокутник всередині іншого такою функцією:

bool RTG::isIn(TOC & t) {

if(t.x>rt.right||t.x<rt.left)return false;

if(t.y>rt.bottom||t.y<rt.top)return false;

return true; }

Функція перевірки чи прямокутники перетинаються:

bool RTG::isPeres(RTG * r) {

for(int i=0;i<4;++i) {

if(this->isIn(r->toc[0]))return true; }

return false;

}

3 Розробка програми меню

Для виконання курсової було проведено дослідження різного роду інформаційних джерел та ознайомлення з теоретичними засадами. Було вирішено розробляти додаток для Windows на основі МFC, адже додаток буде найбільш універсальним та швидкодіючим.

MFC - розшифровується як Microsoft Foundation Classes. MFC - це бібліотека класів, яка покликана спростити життя програмісту. Класи, що входять до неї, охоплюють велику частину функціональних можливостей Windows, а також представляють розробнику значну кількість не тільки дуже потужних додаткових можливостей, а й цілі механізми, які не порушуючи операційної системи, але й істотно її розширюють і спрощують. Швидкість виконання програм, написаних за допомогою MFC, повинна бути порівнянна з програмами, написаними на мові С. При створенні проекту MFC автоматично створюється немодальне діалогове вікно на основі класу CD ialog, який є похідним від класу CObject. Для розміщення довідки, було створено ще одне діалогове вікно. Клас CAboutDlgє похідним від класу CD ialogEх. Похідний клас забезпечує діалогове вікно меншого розміру. У Windows діалоги бувають двох типів - модальні і немодальні. Модальний діалог не дозволяє перейти на інші вікна програми до тих пір поки він не буде закритий. Тобто, модальний діалог відсікає потік повідомлень, що йдуть від миші і клавіатури до його батьківським вікнам або вікнам того ж рівня, роблячи їх недоступними. Немодальний діалог дозволяє перемикатися на інші вікна програми. Він не відсікає потік повідомлень, що йдуть в будь-яку частину вашої програми. В тілі діалогового вікна передбачено:

CDialog () - конструктор без параметрів

CDialog (CWnd * pParentWnd = NULL); - стандартний конструктор,в якому pParentWnd - покажчик на об'єкт батьків або власника, якому належить об'єкт діалогу. Якщо він дорівнює NULL, то батьківським вікном є основне вікно програми.

OnPaint() – відповідає за малювання діалогового.

Крім наявності вікна та елементів управління непогано, якщо програма у вигляді класу вікна зможе реагувати на події. Windows породжує велику кількість подій, якщо ви рухаєте мишку, натискаєте клавішу операційне середовище знає все. Свої знання про ситуацію вона передає за допомогою повідомлень. На програму повідомлення передаються у вигляді безперервного потоку. Нам з цього потоку необхідно вибрати потрібні і обробити[8].

В наведеній вище карті закладено реакцію на натиснення будь-якої кнопки меню. В кожну команду передається відповідний ідентифікатор кнопки меню (наприклад, ID_MENU_Draw) та адреса опису методу відповідного поля меню (наприклад, On Menu Draw() ).

Оскільки меню є невід’ємною складовою будь-якої програми, то і його розробці потрібно приділити достатньо уваги. В протилежному випадку використання програмного засобу не приведе до очікуваних результатів та і взагалі прогнозувати потреби і проблеми користувачів додатку буде дуже важко.

Для зручності керування програмою було спроектоване та розроблене меню користувача. Щоб додати меню до проекту необхідно додати новий ресурс, що показано на рисунку 3:

Рисунок 3 – Додавання ресурсу Menu

На рисунку 4 зображено створену структуру меню у середовищі розробки.

Рисунок 4 – Структура меню

Отже, ми створили програму яка включає в себе меню, для роботи з нею. Для того щоб всі пункти меню працювали ми обираємо пункт контекстного меню «Обробник подій», після чого додаємо код для функціонування кнопок меню.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]