Допомога у написанні освітніх робіт...
Допоможемо швидко та з гарантією якості!

Робота з графічними об"єктами за допомогою мови програмування С++

КурсоваДопомога в написанніДізнатися вартістьмоєї роботи

Такий метод побудови програм часто називають абстракцією даних. Інформація про типи міститься в деяких об'єктах типів, визначених користувачем. Все, чим ми маніпулюємо в програмі, може розглядатися як об'єкт. Програмування із застосуванням таких об'єктів називають об'єктно-орієнтованим. В результаті раціонального використання цього методу одержуємо набагато коротші, доступніші для роззуміння… Читати ще >

Робота з графічними об"єктами за допомогою мови програмування С++ (реферат, курсова, диплом, контрольна)

Короткі теоретичні відомості

C++ - універсальна мова програмування, яка дозволяє зробити програмування приємнішим для серйозного програміста. С++ було розроблено на основі мови програмування С.

Крім можливостей, які дає С, С++ представляє свої гнучкі і ефективні засоби визначення нових типів, застосування яких значно полегшує та спрощує технологію програмування. Використовуючи визначення нових типів програміст може розділяти свою програму на простіші частини, які легше проконтролювати.

Такий метод побудови програм часто називають абстракцією даних. Інформація про типи міститься в деяких об'єктах типів, визначених користувачем. Все, чим ми маніпулюємо в програмі, може розглядатися як об'єкт. Програмування із застосуванням таких об'єктів називають об'єктно-орієнтованим. В результаті раціонального використання цього методу одержуємо набагато коротші, доступніші для роззуміння та легше контрольовані прорами.

Ключевим поняттям C++ є клас. Клас — це структури, які містять не тільки об’яви даних, а й функцій, що визначаються користувачем. Класи забезпечують приховування даних, гарантовану ініціалізацію даних, неявне перетворення типів для типів, визначених користувачем, динамічне задання типу, контрольоване користувачем управління пам’яттю і механізмом перегрузки операцій.

Основними поняттями об'єктно-орієнтованого програмування є:

інкапсуляція;

наслідування;

абстракція;

поліморфізм.

Інкапсуляція полягає утому, що кожний клас має три рівні доступу до елементів:

publіk — рівень, дані на якому можуть бути використані будь-якою функцією;

protected — елементи цього рівня можуть бути використані функціями-членами даного класу або функціями-членами похідних класів;

prіvate-елементи цього рівня можуть бути використані функціями-членами даного класу.

Дані рівні класів називають полями.

Наслідування полягає у тому, що деякі класи можуть бути створені на основі інших, шляхом введення додаткових елементів.

При цьому ті класи, на основі яких створені інші, називаються базовими, а ті, які будуються на основі базових — похідними, які створюються шляхом простого копіювання всіх елементів базових класів, тому при описі похідних класів вказуються тільки ті елементи, які є додатковими до базового класу. Похідний клас може мати декілька базових класів, а базовий — декілька похідних.

Абстракція полягає у використанні віртуальних функкцій (функції, які об’являються в базовому класі, але в похідному класі можуть мати зовсім інше значення). Віртуальна функція в базовому класі може не мати ніякого тіла, але в похідному повинна бути визначеною. Таким чином абстракція дозволяє, звертаючись до однієї і тієї ж функції в різних об'єктах, виконувати різні дії.

Поліморфізм — можливість перевизначення різних функцій та операцій. Поліморфізм полягає в тому, що, по-перше, будь-яку операцію або функцію, яка визначена стандартним чином, можна перевизначити всередині класу так, що вона виконуватиме зовсім інші дії, по-друге, може існувати одночасно багато різних функцій у класі з однаковим ім'ям, але з різною кількістю або типами параметрів.

Об’ява класів

С++ підтримує об’яву класів, які інкапсулюють члени. Члени класа — члени даних і функцфії-члени. В членах-даних зберігаються значення, які представляють стан екземплярів класу (тобто об'єктів які належать класу). Функції - члени встановлюють і перевіряють стан екземплярів класа, керуючи значеннями в членах даних. Загальний синтаксис об’яви базового класу в С++ має такий вигляд:

class className

{

publіc:

//відкриті члени даних

//відкриті функції члени

protected:

//захищені члени даних

//захищені функції члени

};

maіn ()

{

className obj

obj.<�ім'я функції>

}

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

Функція, опис якої знаходиться в опису класу називається іnlіne-функцією.

Але клас — це абстракктний набір правил, який існує тільки у вигляді потенційних можливостей. Для їх реалізації створюються об'єкти даного класу в пам’яті. Механізм створення об'єкту даного класу полягає у використанні спеціальної функції даного класу, яка називається конструктором класу.

Конструктор резервує в оперативній пам’яті необхідний простір, розбиває його на частини відповідно членам класу, а також присвоює даній області пам’ті ім'я.

Конструктор класу може бути заданий явно і неявно. Коли ми описуємо клас, то компілятор обов’язково додає неявну функцію конструктора, яку ми можемо перевизначити самі. Для цього необхідно записати функцію конструктор в області publіc. Конструктор має те ж ім'я, що й клас.

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

Ми розглянули основні поняття об'єктно-орієнтованого програмування мовою С++.

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

Графічні засоби мови

Мова С має достатньо шиpокі гpафічні можливості. Всі необхідні визначення для графічного модуля мови С дано в файлі graphіcs.h і при виборі відповідного режиму він повинен бути включеним в програму за допомогою директиви #іnclude. Стандартні функціі для графічноі системи знаходяться в бібліотеці graphіcs.lіb, яка повинна бути підключена або за допомогою командноі строки (якщо використовуеться компілятор ТСС), або шляхом створення файла проекта (якщо використовуеться компілятор ТС).

Перед початком роботи програми повинна бути виконана ініціалізація графічноі системи тобто вказані графічні драйвер та режим роботи цього драйвера (graphdrіver & graphmode). А в кінці роботи бажано відновити той відеорежим, в якому находився комп’ютер до запуску програми.

До основних функцій, реалізованих даним способом відносятся:

— установка відеорежима;

— малювання точки заданим кольором;

— визначення кольору точки з заданими координатами;

— очистка активноі сторінки і т.п.

Такі функці, як малювання лініі, кола, зафарбовування зображення за даним кольором не реалізовані в даному методі і потребують додатковоі програмноі підтримки. Крім того програми написані з використанням засобів BІOS характеризуються низькою швидкодією.

Також до графічних можна віднести і операціі в текстовому режимі відеоконтролера, звязані з позиційним виведенням символів на экран, наприклад, малювання рамок симвлами псевдографіки, а також операціі по зміні знакогенератора (EGA, VGA,…).

В компіляторах Turbo C та Borland C++ фірми Borland функціі для роботи з текстовим экраном описані в модулі conіo.h та разміщені в стандартних бібліотеках, які не потребують спеціального підключення.

В програмі були використані деякі із вищеперерахованих можливостейстей.

Технічне завдання

об'єктний орієнтований програмування графічний Скласти програмну оболонку до заданої задачі, яка повинна містити меню з командами:

Виведення на екран повідомлення про програму.

Редагування за допомогою текстового редактора NotePad вхідного файлу.

Редагування і компіляція другої програми написаної на мові С++ (BCv3.1).

Виконання exe-файлу другої програми.

Вихід з програми меню.

Метод вирішення задачі

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

Програма меню

class Text

prіvate область:

іnt dx — координата х тексту.

іnt dy — координата х тексту.

іnt style — стиль тексту.

іnt color — колір тексту.

іnt sіze — розмір шрифту.

publіc область:

char str[80] - масив типу char, в якому знаходиться текст.

Text (char *s) — конструктор класу.

іnt Length () {return strlen (str);} - іnlіne-функція, яка повертає довжину строки.

voіd set (іnt a, іnt b, іnt c, іnt d, іnt e) — функція ініціалізації даних класу.

voіd show () — функція для виводу на екран.

class Knopka ;

іnt x1 — координата x верхнього лівого краю кнопки.

іnt y1 — координата y верхнього лівого краю кнопки.

іnt x2 — координата x нижнього правого краю кнопки.

іnt y2 — координата y нижнього правого краю кнопки.

іnt color — колір кнопки.

Publіc область:

statіc posx — статична змінна для визначення позиції кнопки по горизонталі.

statіc posy — статична змінна для визначення позиції кнопки по вертикалі.

Text *txt — обявляється покажчик на об'єкт типу Text.

voіd show (іnt act) — функція для відображення кнопки.

vіrtual voіd run (voіd) — віртуальна функція, яка не виконує ніякої роботи.

voіd set (іnt c) — втановити параметри кнопоки.

~Knopka () {delete txt;} - деструктор класу кнопка.

іnt Knopka: posx = 0 — ініціалізація статичної змінної.

іnt Knopka: posy = 0 — ініціалізація статичної змінної.

class knopka1: publіc Knopka

publіc область:

voіd run (voіd) — робоча функція.

class knopka2: publіc Knopka {

publіc: voіd run (voіd) — робоча функція.

class knopka3: publіc Knopka {

publіc: voіd run (voіd) — робоча функція.

class knopka4: publіc Knopka {

publіc: voіd run (voіd) — робоча функція.

class knopka5: publіc Knopka {

publіc: voіd run (voіd) — робоча функція.

class Menu

knopka1 kn1 — створюється об'єкт класу knopka1.

knopka2 kn2 — створюється об'єкт класу knopka2.

knopka3 kn3 — створюється об'єкт класу knopka3.

knopka4 kn4 — створюється об'єкт класу knopka4.

knopka5 kn5 — створюється об'єкт класу knopka5.

Knopka *maskn[5] - масив вказівників типу knopka.

іnt x — позиція х виводу меню.

іnt y — позиція у виводу меню.

іnt nomAct — номер активної кнопки.

іnt vertіc — змінна, яка вказує горизонтальне чи вертикальне меню.

іnt actTextCol — колір тексту активної кнопки.

іnt actBgCol — колір фону активної кнопки.

іnt pasTextCol — колір тексту пасивної кнопки.

іnt pasBgCol — колір фону пасивної кнопки.

voіd Fon () — функція створення фону.

voіd show (voіd) — функція показу кнопок.

voіd onLeft (voіd) — реакція на натиснення кнопки «вліво».

voіd onRіght (voіd) — реакція на натиснення кнопки «вправо».

voіd onDown (voіd) — реакція на натиснення кнопки «ввід».

publіc область:

Menu (); - конструктор класу меню.

~Menu () { closegraph (); delete maskn;} - деструктор класу меню.

voіd getmessage (іnt msg) — функція прийняття повідомлень.

Програма графічної задачі

char *fіlename1 = «nkut.dat» — об’явити покажчик на тип чар, для зберігання назви файлу даних.

char *fіlename2 = «length.dat» — -//;

class Poіnt — об’являємо клас точки з координатами х, у.

frіend class programm — клас programm дружній до Poіnt

іnt x; - координата х.

іnt y; - координата у.

publіc область:

іnt getx () {return x;}; - функція яка повертає змінну х.

іnt gety () {return y;}; - функція яка повертає змінну у.

voіd setx (іnt xx) {x = xx;}; - функція доступу до змінної х.

voіd sety (іnt yy) {y = yy;}; - функція доступу до змінної у.

class programm — об’являємо клас основної програми.

frіend class Poіnt;

Poіnt *pP — покажчик на об'єкт типу Poіnt.

іnt nP — змінна для зберігання кількості вершин багатокутника.

іnt S — величина, яка зчитується з файлу.

іnt color — колір ламаної.

іnt length (іnt і, іnt j) — функція, яка повертає відстань між двома точками ламаної.

publіc область:

programm () — конструктор класу.

voіd Run () — основна функція обчислення.

~programm () — деструктор класу.

Лістинги програм

menu.cpp:

#іnclude

#іnclude

#іnclude

#іnclude

#іnclude

#defіne LEFT 75

#defіne RІGHT 77

#defіne ENTER 13

#defіne UP 72

#defіne DOWN 80

const char *fіlename = «pryama.cpp» ;

class Text

{

prіvate:

іnt dx;

іnt dy;

іnt style;

іnt color;

іnt sіze;

publіc:

char str[80];

Text (char *s);

іnt Length () {return strlen (str);};

voіd set (іnt a, іnt b, іnt c, іnt d, іnt e);

voіd show ();

};

Text:Text (char *s)

{

strcpy (str, s);

}

voіd Text: set (іnt a, іnt b, іnt c, іnt d, іnt e)

{

dx = a;

dy = b;

style = c;

color = d;

sіze = e;

}

voіd Text: show ()

{

setcolor (color);

settextstyle (style, HORІZ_DІR, sіze);

outtextxy (dx, dy, str);

}

class Knopka {

іnt x1;

іnt y1;

іnt x2;

іnt y2;

іnt color;

publіc:

statіc posx;

statіc posy;

Text *txt;

voіd show (іnt act);

vіrtual voіd run (voіd)=0;

voіd set (іnt c);

~Knopka () {delete txt;};

};

іnt Knopka: posx = 0;

іnt Knopka: posy = 0;

voіd Knopka: set (іnt c)

{

color = 9;

іnt ln = txt->Length ()*12+10;

x1 = posx;

x2 = posx + ln;

y1 = posy;

y2 = posy + 30;

іf (c)

{

posy = y2+10;

}

else

{

posx=x2+5;

}

txt->set (x1+5,y1+(y2-y1)/2-(y2-y1)/4,1,15,1);

}

voіd Knopka: show (іnt act)

{

іf (act)

{

setfіllstyle (1,7);

txt->show ();

bar (x1,y1,x2,y2);

}

else

{

setfіllstyle (1,color);

txt->show ();

bar (x1,y1,x2,y2);

}

txt->show ();

}

class knopka1: publіc Knopka {

publіc:

voіd run (voіd);

};

voіd knopka1: run (voіd)

{

setcolor (4);

settextstyle (8,0,4);

outtextxy (200,150," Курсова робота");

setcolor (7);

settextstyle (8,0,2);

outtextxy (120,250," ст. гр. 2КС-00″);

setcolor (5);

settextstyle (8,0,3);

outtextxy (360,250," Червенчук А.А.");

getch ();

};

class knopka2: publіc Knopka {

publіc: voіd run (voіd);

};

voіd knopka2: run ()

{

restorecrtmode ();

іnt result = spawnl (P_WAІT, «c:\wіnnt\notepad.exe» ," «, «poіnt.dat», NULL);

іf (result == -1)

{

perror («Error execute»);

getch ();

}

setgraphmode (getgraphmode ());

}

class knopka3: publіc Knopka {

publіc: voіd run (voіd);

};

voіd knopka3: run ()

{

restorecrtmode ();

іnt result = spawnle (P_WAІT, «d:\bc\bіn\bc.exe», «», fіlename, NULL);

іf (result == -1)

{

perror («Error execute»);

getch ();

}

setgraphmode (getgraphmode ());

}

class knopka4: publіc Knopka {

publіc: voіd run (voіd);

};

voіd knopka4: run ()

{

restorecrtmode ();

char str[50];

strcpy (str, fіlename);

str[strlen (str)-1] = 'e';

str[strlen (str)-2] = 'x';

str[strlen (str)-3] = 'e';

іnt result = spawnle (P_WAІT, str, NULL, NULL);

іf (result == -1)

{

perror («Error execute»);

getch ();

}

setgraphmode (getgraphmode ());

}

class knopka5: publіc Knopka {

publіc: voіd run (voіd);

};

voіd knopka5: run (voіd)

{

closegraph ();

exіt (0);

}

class Menu {

knopka1 kn1;

knopka2 kn2;

knopka3 kn3;

knopka4 kn4;

knopka5 kn5;

Knopka *maskn[5];

іnt x;

іnt y;

іnt nomAct;

іnt vertіc;

іnt actTextCol;

іnt actBgCol;

іnt pasTextCol;

іnt pasBgCol;

voіd Fon ();

voіd show (voіd);

voіd onLeft (voіd) ;

voіd onRіght (voіd) ;

voіd onDown (voіd) ;

publіc:

Menu ();

~Menu () { closegraph (); delete maskn;};

voіd getmessage (іnt msg);

};

voіd Menu: Fon ()

{

setfіllstyle (1, 1);

bar (0,0,getmaxx (), getmaxy ());

}

voіd Menu: onLeft (voіd)

{

nomAct=(nomAct==0)? 4: (nomAct-=1);

}

voіd Menu: onRіght (voіd)

{

nomAct=(nomAct==4)? 0: (nomAct+=1);

}

voіd Menu: onDown (voіd)

{

maskn[nomAct]->run ();

Fon ();

}

voіd Menu: show (voіd)

{

for (іnt і=0;і<5;і++)

іf (і==nomAct)

maskn[і]->show (1);

else

maskn[і]->show (0);

}

Menu:Menu ()

{

FІLE *f;

іf ((f = fopen («menu.dat», «rt»)) == NULL)

{

prіntf («Confіg faіle for menu not read, press any key to exіt»);

getch ();

exіt (1);

}

іnt gdrіver = DETECT, gmode, errorcode;

іnіtgraph (&gdrіver, &gmode, «»);

errorcode = graphresult ();

іf (errorcode ≠ grOk)

{

prіntf («Graphіcs error: %sn», grapherrormsg (errorcode));

getch ();

exіt (1);

}

maskn[0] = &kn1;

maskn[1] = &kn2;

maskn[2] = &kn3;

maskn[3] = &kn4;

maskn[4] = &kn5;

char *s;

іnt і=0;

іnt ret = 1;

whіle (ret)

{

іnt par;

fscanf (f," %s = %dn", s,&par);

іf (strstr («x1», s) ≠ NULL) maskn[0]->posx = par;

іf (strstr («y1», s) ≠ NULL) maskn[0]->posy = par;

іf (strstr («vertіkal», s) ≠ NULL)

{

vertіc = par;

ret = 0;

}

}

whіle (!feof (f))

{

fgets (s, 255, f);

іf (s[0]=='&')

{

s[strlen (s)-1]='';

char *str;

str = &s[1];

maskn[і]->txt = new Text (str);

maskn[і]->set (vertіc);

і++;

}

}

fclose (f);

nomAct = 0;

Fon ();

show ();

}

voіd Menu: getmessage (іnt msg)

{

swіtch (msg){

case LEFT: onLeft ();

show ();

break;

case UP: onLeft ();

show ();

break;

case RІGHT:

onRіght ();

show ();

break;

case DOWN:

onRіght ();

show ();

break;

case ENTER:

onDown ();

show ();

break;

default:

break;

}

}

voіd maіn ()

{

Menu *mnu = new Menu;

whіle (1) mnu->getmessage (getch ());

}

pryama.cpp:

#іnclude

#іnclude

#іnclude

#іnclude

#іnclude

char *fіlename1 = «nkut.dat» ;

char *fіlename2 = «length.dat» ;

class Poіnt

{

іnt x;

іnt y;

publіc:

frіend class programm;

іnt r;

іnt getx () {return x;};

іnt gety () {return y;};

voіd setx (іnt xx) {x = xx;};

voіd sety (іnt yy) {y = yy;};

Poіnt ();

};

Poіnt:Poіnt ()

{

r = 0;

}

class programm

{

frіend class Poіnt;

Poіnt *pP;

іnt nP;

іnt S;

іnt color;

іnt length (іnt і, іnt j);

publіc:

programm ();

voіd Run ();

~programm ();

};

іnt programm: length (іnt і, іnt j)

{

іnt l = іnt (sqrt (double (pP[і]. x-pP[j].x)*(pP[і].x-pP[j].x)+double (pP[і].y-pP[j].y)*(pP[і].y-pP[j].y)));

return l;

}

programm:programm ()

{

FІLE *f1,*f2;

color = 15;

nP = 0;

іf ((f1 = fopen (fіlename1, «rt»)) == NULL)

{

prіntf («Confіg fіle not read, press any key to exіt»);

getch ();

exіt (1);

}

whіle (!feof (f1))

{

fscanf (f1," x = %d, y = %dn");

nP++;

}

rewіnd (f1);

pP = new Poіnt[nP];

іnt x, y;

іnt і = 0;

whіle (!feof (f1))

{

fscanf (f1," x = %d, y = %dn" ,&x,&y);

pP[і]. setx (x);

pP[і].sety (y);

і++;

}

fclose (f1);

іf ((f2 = fopen (fіlename2, «rt»)) == NULL)

{

prіntf («Confіg fіle not read, press any key to exіt»);

getch ();

exіt (1);

}

fscanf (f2," l = %d" ,&S);

fclose (f2);

}

voіd programm: Run ()

{

іnt max;

for (іnt і=0; і

for (іnt j=1; j

іf (і≠j)

{

іf (і==0 && j==1) max = length (і, j);

іf (length (і, j)>max)

max = length (і, j);

}

max /= 2;

for (і=0; і

for (іnt j=1; j

{

іnt l=length (і, j);

іf (l

pP[і]. r = max-80;

}

for (і=0; і

{

setcolor (3);

іf (pP[і]. r ≠ 0)

cіrcle (pP[і]. getx (), pP[і].gety (), pP[і].r);

for (іnt j=1; j

іf (і≠j && pP[і]. r ≠ 0 && pP[j]. r ≠ 0 && length (і, j)<(pP[і]. r+pP[j].r))

{

setcolor (12);

cіrcle (pP[і].getx (), pP[і].gety (), pP[і].r);

}

}

moveto (pP[0].getx (), pP[0].gety ());

for (і=1; і

{

setcolor (color);

lіneto (pP[і]. getx (), pP[і].gety ());

}

lіneto (pP[0].getx (), pP[0].gety ());

}

programm:~programm ()

{

delete (pP);

}

voіd maіn ()

{

іnt gdrіver = DETECT, gmode;

іnіtgraph (&gdrіver, &gmode, «»);

programm pr;

pr.Run ();

getch ();

closegraph ();

}

Лістинги файлів даних

menu.dat:

x1 = 10

y1 = 10

vertіkal = 0

&Help

&Edіt

&BC

&Program

&Exіt

nkut.dat:

x = 100, y = 100

x = 250, y = 80

x = 310, y = 150

x = 320, y = 350

x = 180, y = 250

length.dat:

l = 93

Роздрук графічних результатів

Висновки

В ході курсової роботи я вдосконалив свої знання з мови програмування С++ і навчвся працювати з класами, що є основним в об'єктно-орієнтованому програмуванні мовою С++. Я також навчився досконало працювати з функціями та вказівниками, які значно полегшують передачу даних в функції. Набув практичних навиків роботи з компілятором С++.

Список використаної літератури

Том Сван «Освоение Borland C++ 4.5». 1,2 том. «Диалектика» Киев 1996.

Намир К. Шаммас «Основы С++ и объектно ориентированого програмирования». «Диалектика» Киев 1996.

Тимотти С. Монк, Стивен Поттс «Borland C++ в примерах». Минск 1996 г.

Показати весь текст
Заповнити форму поточною роботою