Основи програмування на мові С++'

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    298,22 Кб
  • Опубликовано:
    2013-03-14
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Основи програмування на мові С++'















"Основи програмування на мові С++"

програмування мова графічний

Анотація

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

Завдання

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

Вступ

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

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

Тип є конкретне представлення деякої концепції (поняття). Наприклад, наявний у C++ тип float з його операціями +, -, * і т.д. забезпечує обмежену, але конкретну версію математичного поняття дійсного числа. Новий тип створюється для того, щоб дати спеціальне і конкретне визначення поняття, якому ніщо прямо й очевидно серед убудованих типів не відповідає. Як правило, програму, у якій створюються типи, що добре відповідають поняттям додатка, зрозуміти легше, ніж програму, у якій це не робиться. Добре обрані типи, обумовлені користувачем, роблять програму більш чіткою та короткою. Це також дозволяє компілятору виявляти неприпустимі використання об'єктів, що у протилежному випадку залишаться невиявленими до тестування програми.

У визначенні нового типу основна ідея - відокремити несуттєві подробиці реалізації (наприклад, формат даних, що використовуються для збереження об'єкта типу) від тих якостей, що істотні для його правильного використання (наприклад, повний список функцій, що мають доступ до даних). Такий поділ можна описати так, що робота зі структурою даних і внутрішніх адміністративних підпрограмах здійснюється через спеціальний інтерфейс. Програмування без приховання даних (із застосуванням структур) вимагає меншої продуманості, чим програмування з прихованням даних (з використанням класів). Структуру можна визначити не занадто задумуючись про те, як її передбачається використовувати. А коли визначається клас, вся увага зосереджується на забезпеченні нового типу повною кількістю операцій, що визначені для об‘єкту цього типу. Час, витрачений на розробку нового типу, звичайно багаторазово окупається при розробці і тестуванні програми. Ефективним засобом об’єктно-орієнтованого програмування є використання похідних класів. Похідні класи дають простий, гнучкий і ефективний апарат завдання для класу альтернативного інтерфейсу і визначення класу за допомогою додавання можливостей до вже наявного класу без перепрограмування чи перекомпіляції. За допомогою похідних класів можна також забезпечити загальний інтерфейс для декількох різних класів так, щоб інші частини програми могли працювати з об'єктами цих класів однаковим образом. При цьому звичайно в кожен об'єкт розміщується інформація про тип, для того щоб ці об'єкти могли оброблятися відповідним чином у ситуаціях, коли їхній тип не можна визначити під час компіляції. Для елегантної і надійної обробки таких динамічних залежностей типів мається поняття віртуальної функції. По своїй суті похідні класи існують для того, щоб полегшити програмісту формулювання спільності.

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

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


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

Опис класів

При складенні даної курсової роботи я створив три власних класи - це класи tochka, mnogougolnik, та kola. Слід зауважити використання дружніх зв'язків між класами mnogougolnik та kola, де клас kola є дружнім класу mnogougolnik.

class tochka

{x;y;:set (int xx,int yy){x=xx;y=yy};getx() return x;gety() return y;

};

Даний клас записує координати масиву вершин багатокутника, який створюється функцією void dat(). При цьому вищезазначений масив створюється у пам'яті комп'ютера динамічно. Крім цього, клас tochka містить функції getx(), gety(), які повертають значення координат вершин багатокутника.

mnogougolnik

{

int kol;

friend class kola;*tochki;:dat();show();

};

В цьому класі створюється вказівник на масив об'єктів *tochki типу tochka, що являє собою масив координат вершин багатокутника. Кількість цих об'єктів дорівнює kol. Тут також знаходиться функція динамічного створення масиву tochki, а також функція виводу на екран самого багатокутника.

kola

{ymlong;*r;:ymlength();setr(mnogougolnik mnog);show(mnogougolnik mnog);

};

В класі kola міститься функція ymlength(), яка повертає значення змінній ymlong. Ця функція визначає довжину, яку не повинні перевищувати сторони багатокутника. Крім цього тут створюється вказівник на масив *r, який створюється функцією setr(mnogougolnik mnog), і являє собою Множину радіусів кіл, які потрібно описати навколо вершин багатокутника. Нарешті, в цьому класі задана функція show(mnogougolnik mnog), яка виводить на екран вищезазначені кола.

Опис змінних і функцій

void mnogougolnik::dat()

{str[100];i,x,y;*f; f=fopen("A:\\my.txt","r");(str,100,f);(i=0;!feof(f);i++)(str,100,f);=i;

tochki=new tochka[kol];(f);

fgets(str,100,f);(i=0;i<kol;i++)

{(f,"%s%2s%d%s%2s%d%s\n",str,str,&x,str,str,&y,str);[i].set(x,y);

}(f);

}

Дана функція динамічно створює у пам'яті масив об'єктів tochki. Вона зчитує координати цих точок з файлу my.txt, а також записує ці координати у клас tochka.

Змінні функції dat():

str[100] - стрічка, розміром до 100 символів;

i - номер об'єкту масиву;

x,y - координати вершин багатокутника;

kol - кількість членів масиву;

tochki[i] - масив об'єктів типу tochka;

void mnogougolnik::show(void)

{

int i;

for(i=0;i<kol-1;i++)

line(tochki[i].getx(),tochki[i].gety(),tochki[i+1].getx(),tochki[i+1].gety());(tochki[0].getx(),tochki[0].gety(),tochki[kol-1].getx(),tochki[kol-1].gety());

}

Функція show(void) виводить на екран зображення побудованого багатокутника по координатах, які задані в масиві tochki[i].

Змінні функції show(void):

і - номер об'єкту масиву;

kol - кількість членів масиву;

void kola::ymlength()

{str[100];*f; f=fopen("A:\\my1.txt","r");(str,100,f);(f,"%s%s%s%s%s%s%d",str,str,str,str,str,str,&ymlong);(f);

}

В функції ymlength() зчитується величина ymlong, яку не повинні перевищувати сторони нашого багатокутника.

Змінні функції ymlength():

str[100] - стрічка, розміром до 100 символів;

ymlong - задана величина у файлі my1.txt;

void kola::setr(mnogougolnik mnog)

{

int N=mnog.kol;

r=new int[N];r1,r2;i;(i=0; i<N;i++)

{(i==0)=sqrt(pow(mnog.tochki[i].getx()-mnog.tochki[N-1].getx(),2)+

+pow(mnog.tochki[i].gety()-mnog.tochki[N-1].gety(),2));=sqrt(pow(mnog.tochki[i].getx()-mnog.tochki[i-1].getx(),2)+

+pow(mnog.tochki[i].gety()-mnog.tochki[i-1].gety(),2));(i==N-1)=sqrt(pow(mnog.tochki[i].getx()-mnog.tochki[0].getx(),2)+

+pow(mnog.tochki[i].gety()-mnog.tochki[i+1].gety(),2));((r1<=ymlong)&&(r2<=ymlong))

{(r1<r2)[i]=r1/2;[i]=r2/2;

}r[i]=0;

}

}

У вищенаведеній функції setr (mnogougolnik mnog) створюється масив радіусів кіл, які необхідно описати навколо вершин багатокутника. Ця задача вирішується наступним чином: створюються змінні r1,r2, які є довжинами двох прилеглих до вершин сторін багатокутника. Обчислюється значення r1 та r2. За умовою, довжини цих сторін не повинні перевищувати певної величини ymlong, яку ми зчитуємо з файлу. Якщо довжини обох зі сторін не перевищують цієї величини, то ми знаходимо радіуси описаних кіл діленням навпіл довжини меншої з двох прилеглих сторін: r[i]=r1/2 або r[i]=r2/2. Якщо ж ця умова не виконується, в масив радіусів записується значення 0.

Змінні функції setr(mnogougolnik mnog):

N - величина, яку ми прирівнюємо до mnog.kol;

mnog.kol - об'єкт типу mnogougolnik, в якому задана кількість членів масиву tochki - kol;

i - номер об'єкту масиву;

ymlong - величина, яку не повинні перевищувати довжини сторін багатокутника;

r[i] - масив радіусів описаних кіл;

void kola::show(mnogougolnik mnog)

{

int i;

for(i=0;i<mnog.kol;i++)

if(!r[i]==0)

circle(mnog.tochki[i].getx(),mnog.tochki[i].gety(),r[i]);

}

Функція show (mnogougolnik mnog) виконує вивід на екран описаних навколо вершин багатокутника кіл, радіусом r[i], але лише в тому випадку, коли цей радіус не дорівнює 0.

Змінні функції (mnogougolnik mnog):

i - номер об'єкту масиву;

r[i] - радіуси описаних кіл;

mnog.kol - об'єкт типу mnogougolnik, в якому задана кількість членів масиву tochki - kol;

mnog.tochki[i] - координати вершин багатокутника;

Лістинг основної задачі

#include <stdio.h>

#include<iostream.h>

#include <stdlib.h>

#include <math.h>

#include<conio.h>

#include<string.h>

#include<graphics.h>tochka

{

int x;y;:set (int xx,int yy)x=xx;y=yy;getx() return x;gety() return y;

};

/////////////////////////////////////////////kola;

////////////////////////////////////////////mnogougolnik

{kol;class kola;*tochki;:dat();show();

};

///////////////////////////////////////////////kola

{

int ymlong;*r;:ymlength();setr(mnogougolnik mnog);show(mnogougolnik mnog);

};

///---------------------------main(void)

{mnog;ko;.dat();gdriver = DETECT, gmode, errorcode;(&gdriver, &gmode,"C:\\Bc\\bin\\");= graphresult();(errorcode != grOk)

{

printf("Graphics error: %s\n", grapherrormsg(errorcode));("Press any key to halt:");();(1);

}

setbkcolor(1);(6);.show();();.ymlength();.setr(mnog);.show(mnog);();();();

}

///----------------------------mnogougolnik::dat()

{

char str[100];i,x,y;*f; f=fopen("A:\\my.txt","r");

fgets(str,100,f);

for(i=0;!feof(f);i++)(str,100,f);=i;=new tochka[kol];

rewind(f);

fgets(str,100,f);

for(i=0;i<kol;i++)

{

fscanf(f,"%s%2s%d%s%2s%d%s\n",str,str,&x,str,str,&y,str);

tochki[i].set(x,y);

}

fclose(f);

}

///////////////////////////////kola::ymlength()

{

char str[100];*f;

f=fopen("A:\\my1.txt","r");

fgets(str,100,f);

fclose(f);

}

/////////////////////////////////

void kola::setr(mnogougolnik mnog)

{

int N=mnog.kol;=new int[N];r1,r2;i;(i=0; i<N;i++)

{

if (i==0)

r2=sqrt(pow(mnog.tochki[i].getx()-mnog.tochki[N-1].getx(),2)+

+pow(mnog.tochki[i].gety()-mnog.tochki[N-1].gety(),2));=sqrt(pow(mnog.tochki[i].getx()-mnog.tochki[i-1].getx(),2)+

+pow(mnog.tochki[i].gety()-mnog.tochki[i-1].gety(),2));

if(i==N-1)=sqrt(pow(mnog.tochki[i].getx()-mnog.tochki[0].getx(),2)+

+pow(mnog.tochki[i].gety()-mnog.tochki[0].gety(),2));

else=sqrt(pow(mnog.tochki[i].getx()-mnog.tochki[i+1].getx(),2)+

+pow(mnog.tochki[i].gety()-mnog.tochki[i+1].gety(),2));

if((r1<=ymlong)&&(r2<=ymlong))

{

if(r1<r2)[i]=r1/2;[i]=r2/2;

}

else r[i]=0;

}

}

/////////////////////////////////////mnogougolnik::show(void)

{

int i;(i=0;i<kol-1;i++)(tochki[i].getx(),tochki[i].gety(),tochki[i+1].getx(),tochki[i+1].gety());(tochki[0].getx(),tochki[0].gety(),tochki[kol-1].getx(),tochki[kol-1].gety());

}

///////////////////////////////////kola::show(mnogougolnik mnog)

{

int i;(i=0;i<mnog.kol;i++)(!r[i]==0)(mnog.tochki[i].getx(),mnog.tochki[i].gety(),r[i]);

}

Файли з вхідними даними

Рис. Файл my.txt

Рис.Файл my1.txt

Роздруківка графічного вирішення

Рис.

Програма Menu

#include<stdio.h>

#include <conio.h>

#include <process.h>

#include <string.h>

#define LEFT 75

#define RIGHT 77

#define DOWN 13

Knopka

{x1;y1;x2;y2;str[80];:setparam (int xx1 , int yy1, int xx2,int yy2,char *sstr) ;show(int Lcolor, int bcolor);void run(void)=0;

};knopka1:public Knopka

{:run(void);

};knopka2:public Knopka

{:run(void) ;

};knopka3 : public Knopka

{:run (void) ;

};knopka4: public Knopka

{:run(void);

};knopka5: public Knopka

{:run(void) ;

};Menu

{kn1;kn2;kn3;kn4;kn5;*maskn[5];x;y;nomAct;actTextCol;actBgCol;pasTextCol;pasBgCol;show(void);onLeft(void) ;onRight(void) ;onDown(void) ;:(int xx,int yy);getmessage(int msg);

};main()

{(0);();mnu(15,1);(1) mnu.getmessage(getch());

}Knopka::setparam(int xx1,int yy1,int xx2,int yy2,char *sstr)

{=xx1;=yy1;=xx2;=yy2;(str,sstr);

};Knopka::show(int tcolor,int bcolor)

{(tcolor);(bcolor);(x1,y1,x2,y2);();(1,1);("%s",str);

}knopka1::run(void)

{str[80] ;* fin=fopen("a:\\button.txt","r") ;(15);(1) ;(2,4,78,25) ;() ;(int i=0;i<14;i++)

{(str,80,fin) ;(1,1+i) ;(str);

}(0) ;() ;() ;

{(P_WAIT,"C:\\WINDOWS\\notepad.exe","notepad.exe",

"A:\\my.txt",NULL) ;

}knopka3::run(void)

{(P_WAIT,"c:\\bc3.1\\bin\\bc.exe","bc.exe","a:\\Cursovaya.cpp",NULL) ;

//spawnl (P_WAIT,"d:\\Bc31\\bin\\bc.exe","bc.exe",a:\\Cursovaya.cpp", NULL) ;

}knopka4::run(void)

{(P_WAIT,"A:\\Cursovaya.exe",NULL);

}knopka5::run (void)

{(0);

}Menu::onLeft(void)

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

}Menu::onRight(void)

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

}Menu::onDown(void)

{[nomAct]->run() ;

}Menu::show(void)

{

_setcursortype(_NOCURSOR) ;(int i=0;i<5;i++)(i==nomAct)[i]->show (actTextCol, actBgCol) ;[i]->show (pasTextCol, pasBgCol) ;

}Menu :: getmessage ( int msg)

{(msg)

{LEFT:() ;() ;;RIGHT:() ;() ;;DOWN:() ;();

}

}::Menu(int xx,int yy)

{=xx;=yy;=0;[0]=&kn1;[1]=&kn2;[2]=&kn3;[3]=&kn4;[4]=&kn5;=15;=1;=0;=2;* fin=fopen("a:\\menus.txt","r") ;str[80];(int i=0;i<5;i++)

{(str,80,fin) ;[i]->setparam(x,y,x+strlen(str)-2,y,str);=x+strlen(str);

}(fin) ;() ;

Файли даних для Menu

Рис. Лістинги вхідних файлів Button.txt та Menus.txt

Рис.

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

Висновки

Для вирішення задачі, поставленої в курсовій роботі, я вивчив основи об‘єктно-орієнтованого програмування (мову С++) та успішно застосовував їх. При цьому я створив три власних класи: tochka, mnogougolnik, та kola. Кожен клас має власні приватні елементи та інтерфейсні функції, що забезпечують доступ до його приватних елементів. При описі класів я ознайомився з використанням та застосуванням дружніх зв‘язків між класами та функціями. Розробив власний метод вирішення поставленої задачі: вивів формулу для створення масиву об'єктів типу tochki.

Навчився користуватися інформацією, що задана у текстових файлах, а також при розробленні програми використовував графічний редактор для побудови геометричних фігур. Слід зауважити, що існує одне обмеження, що накладається на початкові умови - довжина сторін багатокутника не повинна перевищувати певної довжини. Після отримання графічних результатів, можна освідчитись у правильності побудови алгоритмів та методів розв’язання даної задачі: при цьому ті вершини багатокутника, сусідні сторони (або сторона) яких перевищує вказану величину залишаються без описання колами, інші описані колами, радіус яких становить половині довжини меншої сусідньої сторони. Для більш зручного користуванням програмою є також програма Menu, з якої можна відкрити текстовий файл даних my.txt та my1.txt із подальшим записом та збереженням необхідної інформації, запустити саму програму Cursovaya.exe , відкрити для коригування файл Cursovaya.cpp, прочитати довідку про саму програму.

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

1.Б.Страуструп «Язык программирования Си++». Москва «Бином» 2001.

.«Си++ Язык программирования». Москва «И.В.К-СОФТ» 1991.

.„Языки программирования Си и С++». Москва. «Познавательная книга плюс» 2001.

.«С++ специальный справочник». Санкт-Петербург. «Питер» 2001.


Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!