Об’єктно-орієнтоване програмування

Розробка на мові програмування Borland C++ програми для зчитування з файлу координат точок. Математична модель, її визначення та переведення в алгоритм розв’язку. Координати файлу та точок. Лістинг програм Tr.cpp, Menys.H, TRIK.H та вхідного файлу.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 17.02.2009
Размер файла 99,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

46

Міністерство освіти України

Вінницький державний технічний університет

Інститут ІТКІ

Факультет КС

Курсова робота з дисципліни

"Об'єктно-орієнтоване програмування”

Розробив:

студент групи 2КС-01

Сауленко О.Б.

Керівник:

___________ Черняк О.І.

_______________ 2002 р.

Вінниця - 2002 Зміст

  • Анотація…………………………………………………………………………...3
  • Завдання 4
  • Опис методу вирішення задачі 5
  • Опис класів та їх членів 7
  • Лістинги програм 8
    • Tr.cpp 8
    • Menys.H 9
    • TRIK.H 29
  • Лістинг вхідного файлу 42
  • Результати роботи 43
  • Висновки 46
  • Список використаної літератури 47

Анотація

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

Завдання

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

Опис методу вирішення задачі

Потрібно знати довжини його сторін, їх можна знайти за формулою:

де, х1, у1 та х2,у2 - координати одної та іншої вершини трикутника.

Нехай а, в, с - сторони трикутника.
Косинус кута між сторонами в і с за теоремою косинусів:
Cos(a)=(b*b+c*c-a*a)/(-2*b*c);

Якщо кут тупий то косинус такого кута буде від'ємним, Тобто чим більший кут тим менший косинус.

Для розв'язання поставленої задачі нам потрібно шукати точку перетину прямих, а точніше не прямих в відрізків прямих, з яких складається трикутник.

Запишемо рівняння прямої через 2-ві точки:

Y0=Y2-Y1;

X0=X2-X1;

X*Y0-X1*Y0 = X0*Y-X0Y1

X*Y0- X0*Y = X1*Y0 -X0Y1

X1*Y0 -X0Y1=Z

(ми отримали рівняння прямих)

X11*Y01 -X01Y11=W;

Знайдемо розв'язок даної системи рівнянь

Це і буде розв'язок. Щоб дізнатись чи точка належить відрізку, потрібно перевірити чи відповідні координати точки лежать в межах відповідних координат кінців відрізка.

Опис класів та їх членів

В програмі TRIK.H описаний власний клас TPoint. В цьому класі зберігаються всі відомості про чотирикутники. В класі описані слідуючи члени:

int x;- координати Х точки.

int y;- координати Х точки.

Також в даному класі описані слідуючи методи:

void drow(int col);- виводить на екран точку вказаним кольором.

void setall(int xx,int yy)- встановлює точки

{

x=xx; y=yy;

};

TPoint(); - конструктор

~TPoint(){}.- деструктор.

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

Tr.cpp

(основна програма)

#include <stdio.h>

#include "menys.h"

#include <conio.h>

#include <stdlib.h>

#include <string.h>

#include <process.h>

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

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

void main(void)

{

grinit();

EditInitall();

init();

while (1)

{

getcurcorpos();

if (kbhit())

if (getch()==0)

if (getch()==45)break;

};

closegraph();

}

Menys.H

(меню)

#include <graphics.h>

#include <string.h>

#include "dialogs.h"

#include <stdlib.h>

#include "trik.h"

//---

// =0 якщо клавіші підняті

// =2 або на рівні панелі

const Flat=2;

const coloron=10;

const coloroff=1;

const colordn=14;

const colorhead=5;

//----

const colorsel=10;

const colornotsel=1;

const ButtonColor=7;

const ButtonN=4;

const Meny1=3;

const Meny2=4;

const Meny3=0;

const Meny4=0;

const Meny5=0;

const Meny6=0;

int BoolMeny1=0;

int BoolMeny2=0;

int BoolMeny3=0;

int BoolMeny4=0;

int BoolMeny5=0;

int BoolMeny6=0;

void DoSome(int i);

void windows(int x,int y,int xx,int yy,int color,char s[100],int p);

struct Shablon

{

int q;

int a;

} NewS[80],OldS[80];

int SNum=-1,prans=0,SNumOld=-1;

char *Old1="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",

*Pr1="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";

class TButton

{

public:

TButton(); //Конструктор

~TButton(){}; //деструктор

virtual void Draw();

void setwidth(int x){width=x;};

void setheight(int x){height=x;};

void settop(int x){top=x;};

void setleft(int x){left=x;};

virtual void setonoff(int x){onoff=x;Draw();};

void setcol(int x){color=x;};

void setcapt(char *x){caption=x;};

int getwidth()const {return width;};

int getheight()const {return height;};

int gettop()const {return top;};

int getleft()const {return left;};

int getonoff()const {return onoff;};

int getcol()const {return color;};

const char* getcapt(){return caption;};

virtual void mousemove(int i);

virtual void setpos(int x,int y, char* capt,int i=0);

protected:

int width;

int height;

int top;

int left;

int onoff;

int color;

char *caption;

};

class TMeny:public TButton

{

public:

TMeny();

~TMeny(){};

virtual void Draw();

virtual void setonoff(int x)

{

onoff=x;

if (!onoff) color=colornotsel;

else color=colorsel;

Draw();

};

virtual void mousemove(int i);

virtual void setpos(int x,int y, char* capt,int i=0);

};

void TMeny::mousemove(int i)

{

if (mousein(left,top,left+width,top+height))

{

if (!getbutton(1))

{ //Не нажата

if (!onoff) setonoff(1);

}

else

{

if (onoff)

{

//Нажата

setonoff(0);

mouseoff();

putimage(xy1-2,yy1-2, arrow, 0);

mouseon();

free(arrow);

if (BoolMeny1) DoSome(i+20);

if (BoolMeny2) DoSome(i+30);

if (BoolMeny3) DoSome(i+40);

if (BoolMeny4) DoSome(i+50);

if (BoolMeny5) DoSome(i+60);

if (BoolMeny6) DoSome(i+70);

BoolMeny1=0;

BoolMeny2=0;

BoolMeny3=0;

BoolMeny4=0;

BoolMeny5=0;

BoolMeny6=0;

}

}

}

else

if (getbutton(1))

{

if (!mousein(xy1,yy1,xy2+6,yy2+yy1+4))

{

if (onoff) setonoff(0);

mouseoff();

putimage(xy1-2,yy1-2, arrow, 0);

mouseon();

free(arrow);

BoolMeny1=0;

BoolMeny2=0;

BoolMeny3=0;

BoolMeny4=0;

BoolMeny5=0;

BoolMeny6=0;

}

}

else if (onoff) setonoff(0);

}

void TMeny::setpos(int x,int y, char* capt,int i)

{

left=x;

top=y;

caption=capt;

if (i) Draw();

}

void TMeny::Draw()// Метод побудови кнопок------------

{

int i;

setfillstyle(1,7);

setlinestyle(0,0,0);

setcolor(color);

mouseoff();

bar(left,top,left+width,top+height);

moveto(5+left,5+top);

outtext(caption);

if (color==colornotsel) setcolor(7);

line(left+height/2,top,left+width-height/2,top);

line(left+height/2,top+height,left+width-height/2,top+height);

ellipse(left+height/2,top+height/2,90,270,height/2,height/2);

ellipse(left+width-height/2,top+height/2,270,90,height/2,height/2);

line(left+height/2+2,top+2,left+width-height/2-2,top+2);

line(left+height/2+2,top+height-2,left+width-height/2-2,top+height-2);

ellipse(left+height/2+2,top+height/2,90,270,height/2-1,height/2-2);

ellipse(left+width-height/2-2,top+height/2,270,90,height/2-1,height/2-2);

mouseon();

} // Метод побудови кнопок--------------------------------

TMeny::TMeny()

{

caption='\0';

width=120;

height=18;

top=0;

left=0;

color=colornotsel;

onoff=0;

}

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

// ОБ'ЯВА ОБ'ЄКТІВ

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

TButton button[ButtonN];

TMeny FMeny1[Meny1],FMeny2[Meny2];

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

void DrowMenyAll(TMeny FirstMeny[],int FMeny)

{

xy1=FirstMeny[0].getleft()-4;

yy1=FirstMeny[0].gettop()-4;

xy2=FirstMeny[0].getleft()+FirstMeny[0].getwidth();

yy2=FirstMeny[FMeny-1].gettop()-FirstMeny[0].gettop()+FirstMeny[0].getheight()+8;

size = imagesize(xy1-2, yy1-2, xy2+6, yy1+yy2+4);

arrow = malloc(size);

mouseoff();

getimage(xy1-2, yy1-2, xy2+6, yy1+yy2+4, arrow);

int dx=(xy2-xy1+4)/5;

int dy=(yy2+2)/5;

for (int k=1;k<=5; k++)

{

windows(xy1,yy1,dx*k,dy*k,7,"",0);

delay(30);

}

mouseon();

windows(xy1,yy1,xy2-xy1+4,yy2+2,7,"",0);

windows(xy1+2,yy1+2,xy2-xy1,yy2-2,7,"",1);

for (int gg=0;gg<FMeny;gg++)

{

FirstMeny[gg].Draw();

}

}

void mysound()

{

sound(1000);

delay(30);

nosound();

}

void message(char *s0="",

char *s1="",

char *s2="",

char *s3="",

char *s4="",

char *s5="",

int boolll=0)

{

mysound();

size=imagesize(199,99,200+241,241);

arrow=malloc(size);

mouseoff();

getimage(199,99,200+241,241,arrow);

mouseon();

windows(200,100,240,140,7,"",0);

windows(202,102,236,15,colorhead,s0,1);

setcolor(1);

mouseoff();

outtextxy(210,130,s1);

if (boolll)

{

moveto(210,150);

outtext(s2);

outtext(Old1);

}else outtextxy(210,150,s2);

outtextxy(210,170,s3);

outtextxy(210,190,s4);

if (boolll)

{

moveto(210,210);

outtext(s5);

outtext(Pr1);

}else outtextxy(210,210,s5);

mouseon();

while (getbutton(1));

while ((!getbutton(1))&&(!kbhit()));

mouseoff();

putimage(199,99,arrow,0);

mouseon();

free(arrow);

while (kbhit()) getch();

}

void TButton::mousemove(int i)

{

if (mousein(left,top,left+width,top+height))

{

if (getbutton(1))

{

if (onoff!=1) setonoff(1);

}

else

if (onoff==1)

{

setonoff(0);

DoSome(i);

}

else

{

if (onoff!=Flat) setonoff(Flat);

}

}else if (onoff!=0) setonoff(0);

}

void TButton::setpos(int x,int y, char* capt,int i)

{

left=x;

top=y;

caption=capt;

Draw();

}

TButton::TButton()

{

caption='\0';

width=100;

height=18;

top=0;

left=0;

color=ButtonColor;

onoff=0;

}

void TButton::Draw()// Метод побудови кнопок------------

{

int i=onoff;

setfillstyle(1,color);

setlinestyle(0,0,0);

mouseoff();

bar(left,top,left+width,top+height);

setcolor(1);

switch (i)

{

case 0:setcolor(coloroff);break;

case 1:setcolor(colordn);break;

case 2:setcolor(coloron);break;

}

// rectangle(left,top,left+width,top+height);

// rectangle(left+2,top+2,left+width-2,top+height-2);

// line(left,top,left,top+height);

line(left+height/2,top,left+width-height/2,top);

line(left+height/2,top+height,left+width-height/2,top+height);

ellipse(left+height/2,top+height/2,90,270,height/2,height/2);

ellipse(left+width-height/2,top+height/2,270,90,height/2,height/2);

line(left+height/2+2,top+2,left+width-height/2-2,top+2);

line(left+height/2+2,top+height-2,left+width-height/2-2,top+height-2);

ellipse(left+height/2+2,top+height/2,90,270,height/2-1,height/2-2);

ellipse(left+width-height/2-2,top+height/2,270,90,height/2-1,height/2-2);

// line(left+width,top,left+width,top+height);

switch (i)

{

case 0:moveto(5+left,5+top);break;

case 1:moveto(6+left,6+top);break;

case 2:moveto(5+left,5+top);break;

}

if ((!Flat)&&(!i)) moveto(5+left,5+top);

outtext(caption);

mouseon();

} // Метод побудови кнопок--------------------------------

void grinit()//--ініціал графіки----------------------------

{

int gdriver = DETECT, gmode, errorcode;

initgraph(&gdriver, &gmode, "");

errorcode = graphresult();

if (errorcode != grOk)

{

printf("Graphics error: %s\n", grapherrormsg(errorcode));

printf("Press any key to halt:");

getch();

exit(1);

}

mouseinit();

mouseon();

}//_void grinit()//-----------------------------------------------

void getcurcorpos()

{

int i;

if (BoolMeny1)

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

{

if (BoolMeny1)

FMeny1[i].mousemove(i);

}//===================================

if (BoolMeny2)

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

{

if (BoolMeny2)

FMeny2[i].mousemove(i);

}//====================================

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

{

button[i].mousemove(i);

}//=======================================

}

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

//----------------------------------------------------------------

//-----------------------------------------------------------------

void init()

{

mouseoff();

cleardevice();

mouseon();

windows(1,1,637,477,7,"",0);

// windows(1,25,637,27,7,"",0);

windows(3,50,630,406,7,"",1);

windows(3,3,633,20,colorhead,"Трикутники",1);

// windows(1+2,20+2,637-3,27-4,7,"",1);

windows(3,460,630,17,7,"",1);

button[0].setwidth(18);

button[0].setheight(18);

button[0].setpos(615,4,"X");

button[1].setpos(5,28," Файл");

button[2].setpos(110,28," Вивiд");

button[3].setpos(215,28," Про прог.");

for (int i=0;i<Meny1; i++)

FMeny1[i].setwidth(190);

FMeny1[0].setpos(15,53," Відкрити файл...");

FMeny1[1].setpos(15,53+19," Розташувати випадково");

FMeny1[2].setpos(15,53+19+19," Вихід Alt+X");

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

FMeny2[i].setwidth(190);

FMeny2[0].setpos(125,53," Показати всi точки");

FMeny2[1].setpos(125,53+19," Показати трикутники");

FMeny2[2].setpos(125,53+38," Показати iнформацiю");

FMeny2[3].setpos(125,53+38+19," Очистити вiкно");

}

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

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

void DoSome(int i)

{

char *sd="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";

switch (i)

{

case 0:

closegraph();exit(0);

break;

case 1:

DrowMenyAll(FMeny1,Meny1);

BoolMeny1=1;

break;

case 2:

DrowMenyAll(FMeny2,Meny2);

BoolMeny2=1;

// EditEnter(edit2,FEdit2);

// outtextxy(200,200,edit2[2].gettext());

break;

case 3: message("Про програму",

" Курсова робота",

" ТРИКУТНИКИ",

" Програму написала",

" ст.гр. 2КC-01",

" Сауленко О.Б.");

break;

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

case 20:

edit1[0].setpos(200,200,"Вiдкрити файл","pix.dat");

EditEnter(edit1,FEdit1);

if (exittru!=13) break;

sd="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";

strcpy(sd,edit1[0].gettext());

readfromfile(sd);

perebor();

windows(3,460,630,17,7,"Вiдкрито файл:",1);

setcolor(1);

outtextxy(126,466,sd);

break;

case 21:

randomize();

RndPix1le(random(90)+5);

perebor();

windows(3,460,630,17,7,"Випадкове розташування точок",1);

break;

case 22:closegraph();exit(1);break;

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

case 30: setviewport(3,50,627,456,1);

PixDrowAll(14);

setviewport(0,0,627,456,0);break;

case 31:

setviewport(3,50,627,456,1);

if (MinP.f) drawtr(MinP.i,MinP.j,MinP.k,5);

if ((MaxP.f)&&(((MaxP.s)!=(MinP.s)))) drawtr(MaxP.i,MaxP.j,MaxP.k,5);

setviewport(0,0,627,456,0);

break;

case 32:

PointBool=0;

ifperetun(MinP.i,MinP.j,MaxP.i,MaxP.j);

ifperetun(MinP.i,MinP.j,MaxP.k,MaxP.j);

ifperetun(MinP.i,MinP.j,MaxP.i,MaxP.k);

ifperetun(MinP.k,MinP.j,MaxP.i,MaxP.j);

ifperetun(MinP.k,MinP.j,MaxP.k,MaxP.j);

ifperetun(MinP.k,MinP.j,MaxP.i,MaxP.k);

ifperetun(MinP.i,MinP.k,MaxP.i,MaxP.j);

ifperetun(MinP.i,MinP.k,MaxP.k,MaxP.j);

ifperetun(MinP.i,MinP.k,MaxP.i,MaxP.k);

PointBool=1;

char pmin[15],

pmax[15];

ltoa((MaxP.s),pmax,10);

ltoa((MinP.s),pmin,10);

if (!MinP.f)

{

message("Iнформацiя","",

" Трикутники побудувати",

" неможливо!!!");

break;

}

if (MaxP.s==MinP.s)

{

message("Iнформацiя",

"Трикутники співпадають",

"",

"Вони мають площу",

pmax);

break;

}

if (peretun)

{

message("Iнформацiя",

"Трикутники перетинаються",

"Площа найменшого:",

pmin,

"Площа найбільшого:",

pmax);

}

else

{

message("Iнформацiя",

"Трикутники не перетинаються",

"Площа найменшого:",

pmin,

"Площа найбільшого:",

pmax);

}

break;

case 33:windows(3,50,630,406,7,"",1);break;

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

}

}

TRIK.H

(бібліотека для роботи з точками і трикутниками)

#include <math.h>

#include <graphics.h>

#include <stdlib.h>

#include <string.h>

#include <process.h>

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

const maxPoint=100; //Максимальна кiлькiсть точок

float distMAX=0;

int PointBool=1;

class TPoint

{

public:

TPoint();

~TPoint(){};

int getx()const{return x;};

int gety()const{return y;};

void setx(int xx){x=xx;};

void sety(int xx){y=xx;};

void setall(int xx,int yy)

{

x=xx; y=yy;

};

void drow(int col);

private:

int x;

int y;

};

struct MaxMin

{

int i,j,k,f;

long int s;

} MaxP, MinP;

///////----------------------------------------------\\\\\\\\\\\\\\\\

///////----------------------------------------------\\\\\\\\\\\\\\\\

TPoint Pix1[maxPoint]; // масив об'єкт

int Count=0; //колькість активних точок

int peretun=0; // чи перетинаються трикут

///////----------------------------------------------\\\\\\\\\\\\\\\\

///////----------------------------------------------\\\\\\\\\\\\\\\\

TPoint::TPoint()

{

x=0;

y=0;

}

void TPoint::drow(int col) // метод прорисовки точок

{

mouseoff();

setcolor(col);

setfillstyle(1,col);

fillellipse(x,y,1,1);

mouseon();

}

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

void getcoord(int &x,int &y,char s[])

// выделяет координаты с строчки прочинаной с файла

{

int fl=0,n=0;

char sc[20];

for (int i=0; i<strlen(s);i++)

{

if ((s[i]>='0')&&(s[i]<='9'))

{

if (!fl)

{

fl=i;

n++;

}

sc[i-fl]=s[i];

}

else

if (fl)

{

sc[i-fl]='\0';

fl=0;

switch (n)

{

case 1:x=atoi(sc);break;

case 2:y=atoi(sc);break;

}

}

else fl=0;

}

}

int readfromfile(char *filename)

// Читає з файлу координати та радіус, возв 1, якщо все нормально

// 0 якщо нема файлу

{

FILE *fil;

if ((fil = fopen(filename, "r")) == NULL)

{

return 0;

}

char s[70];

int x,y,x1,y1;

Count=0;

while (!feof(fil))

{

fgets(s,69,fil);

if (feof(fil))

{

s[strlen(s)+1]='\0';

s[strlen(s)]=' ';

}

getcoord(x,y,s);

Pix1[Count].setall(x,y);

Count++;

}

fclose(fil);

peretun=0;

return 1;

}// Читає з файлу координати й радіус, возв 1, якщо все нормально

void PixDrowAll(int col)//рис все точки

{

setcolor(col);

for (int i=0;i<Count;i++)

{

Pix1[i].drow(col);

}

}

int getpoint(int x1,int y1,int x2,int y2,

int x11,int y11,int x21,int y21, float &rezx, float &rezy)

// визначає точку пересічення відрізків

{

long int x0=x2-x1;

long int y0=y2-y1;

long int x01=x21-x11;

long int y01=y21-y11;

if ((y0==0)&&(y01==0)) return 0;

if ((y0!=0)&&(y01!=0))

if ((x0*1.0/y0)==(x01*1.0/y01)) return 0;

if (((!x0)&&(!x01))||

((!y0)&&(!y01))||

((!x01)&&(!x0))||

((!y01)&&(!y0))) return 0;

float z=x1*y0-y1*x0;

float w=x11*y01-y11*x01;

if (!x0)

{

rezx=x1;

rezy=((rezx*y01-w)/x01*1.0);

}

else

if (!y0)

{

rezy=y1;

rezx=(w+rezy*x01)/y01*1.0;

}

else

if (!x01)

{

rezx=x11;

rezy=((rezx*y0-z)/x0*1.0);

}

else

if (!y01)

{

rezy=y11;

rezx=(z+rezy*x0)/y0*1.0;

}

else

{

if (!y0) return 0;

w=w-(y01*z/y0*1.0);

rezy=w/(-x01+(x0*y01)/y0*1.0);

rezx=(z+rezy*x0)/y0*1.0;

}

int t;

if (x1>x2)

{ t=x1;x1=x2;x2=t;}

if (y1>y2)

{ t=y1;y1=y2;y2=t;}

if (x11>x21)

{ t=x11;x11=x21;x21=t;}

if (y11>y21)

{ t=y11;y11=y21;y21=t;}

if (!((rezx+2>=x1)&&(rezx-2<=x2))) return 0;

if (!((rezx+2>=x11)&&(rezx-2<=x21))) return 0;

if (!((rezy+2>=y1)&&(rezy-2<=y2))) return 0;

if (!((rezy+2>=y11)&&(rezy-2<=y21))) return 0;

// printf("\n %f %f ",rezx,rezy);

return 1;

}//_кінець визначення точки пересічення

int ifperetun(int i,int j,int k,int l) // або пересікаються відрізки

{

float x,y;

if (getpoint( Pix1[i].getx(),Pix1[i].gety(),

Pix1[j].getx(),Pix1[j].gety(),

Pix1[k].getx(),Pix1[k].gety(),

Pix1[l].getx(),Pix1[l].gety(),x,y))

{

setcolor(11);

setfillstyle(1,5);

if (PointBool)

{ mouseoff();

fillellipse(x,y,2,2);

mouseon();

}

peretun=1;

// return 1;

}

return 0;

}

void RndPix1le(int n)//випадково точки

{

if (n>maxPoint) n=maxPoint;

for (int i=0; i<n;i++)

{

Pix1[i].setall(random(600),random(350));

}

peretun=0;

Count=n;

}

double dist(int x, int y, int x1, int y1)// довжина сторони

{

return sqrt((pow((x-x1),2)+pow((y-y1),2)));

}

double dist_2(int x, int y, int x1, int y1)// довжина сторони у другому ступені

{

return (1.0*(x-x1)*(x-x1)+1.0*(y-y1)*(y-y1));

}

int typok(int x1,int y1,int x2,int y2,int x3,int y3)//перевірка або тупо кутовий

{

double

a=dist_2(x1,y1,x2,y2),

b=dist_2(x3,y3,x2,y2),

c=dist_2(x1,y1,x3,y3);

return (((a-b-c)>0)||

((b-c-a)>0)||

((c-b-a)>0));

}

long int sqtruk(int x1,int y1,int x2,int y2,int x3,int y3)//площ трекут

{

double

a=dist(x1,y1,x2,y2),

b=dist(x3,y3,x2,y2),

c=dist(x1,y1,x3,y3),

p=(a+b+c)/2.0,

ss;

if (b>a){ss=a;a=b;b=ss;}

if (c>a){ss=a;a=c;c=ss;}

if (c>b){ss=c;c=b;b=ss;}

if (abs(c+b-a)<2.5) return 0;

p=p*(p-a)*(p-b)*(p-c);

ss=(pow(p,0.5));

long int kk=(ss+0.5);

return (kk);

}

void drawtr(int i, int j, int k,int col=10)//малює трикутник

{

setcolor(col);

moveto(Pix1[i].getx(),Pix1[i].gety());

mouseoff();

lineto(Pix1[j].getx(),Pix1[j].gety());

lineto(Pix1[k].getx(),Pix1[k].gety());

lineto(Pix1[i].getx(),Pix1[i].gety());

if ((MaxP.s)!=(MinP.s))

{

ifperetun(MinP.i,MinP.j,MaxP.i,MaxP.j);

ifperetun(MinP.i,MinP.j,MaxP.k,MaxP.j);

ifperetun(MinP.i,MinP.j,MaxP.i,MaxP.k);

ifperetun(MinP.k,MinP.j,MaxP.i,MaxP.j);

ifperetun(MinP.k,MinP.j,MaxP.k,MaxP.j);

ifperetun(MinP.k,MinP.j,MaxP.i,MaxP.k);

ifperetun(MinP.i,MinP.k,MaxP.i,MaxP.j);

ifperetun(MinP.i,MinP.k,MaxP.k,MaxP.j);

ifperetun(MinP.i,MinP.k,MaxP.i,MaxP.k);

}

mouseon();

}

int perebor() // пошук найбільшого і найменшого трикутника

{

MaxP.f=0;

MinP.f=0;

long int s=0;

for (int i=0;i<Count-2;i++)

for (int j=i+1;j<Count-1;j++)

for (int k=j+1;k<Count;k++)

{

int

xi=Pix1[i].getx(),

yi=Pix1[i].gety(),

xj=Pix1[j].getx(),

yj=Pix1[j].gety(),

xk=Pix1[k].getx(),

yk=Pix1[k].gety();

if (typok(xi,yi,xj,yj,xk,yk))

{

s=sqtruk(xi,yi,xj,yj,xk,yk);

if (s>0)

{

if (MaxP.f)

{

if (MaxP.s<s)

{

MaxP.i=i;

MaxP.j=j;

MaxP.k=k;

MaxP.s=s;

}

}

else

{

MaxP.i=i;

MaxP.j=j;

MaxP.k=k;

MaxP.s=s;

MaxP.f=1;

}

}

if (s>0)

{

if ((MinP.f))

{

if (MinP.s>s)

{

MinP.i=i;

MinP.j=j;

MinP.k=k;

MinP.s=s;

}

}

else

{

MinP.i=i;

MinP.j=j;

MinP.k=k;

MinP.s=s;

MinP.f=1;

}

}

}

}

return 1;

}

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

Файл pix.dat

Результати роботи

Вигляд меню програми:

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

Вивід вікна з інформацією

Висновки

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

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

1. Керніган Рітчі. Розробка алгоритмів та програмування на мові Паскаль. - Х.: ВКП “Парітет” ЛТД, 1995.

2. Стенли Б. Липман Язык программирования С++ .

3. Страуструп Б. Техніка програмування. Київ. Наука, 1986 р.

4. Керніган Б. Мова С., Москва „Фінанси і статистика”, 1992.

5. Юров Г.Н. Практикум по вычислительной математике. - М.: Высш. шк., 1990.

6. Таран В, Програмування мовою Паскаль .Київ. Наука, 1985 р.

7. Шилдт В.К., Зеленський К. Програмування на мові С, Київ, “Вища школа”, 1986 р.


Подобные документы

  • Редагування за допомогою текстового редактора NotePad вхідного файлу даних. Програмна реалізація основного алгоритму з використанням засобів об'єктно-орієнтованого програмування. Об’ява та опис класів і об'єктів. Розробка допоміжних програмних засобів.

    курсовая работа [69,4 K], добавлен 14.03.2013

  • Особливості редагування за допомогою текстового редактора NotePad вхідного файлу. C++ як універсальна мова програмування, знайомство с функціями. Характеристика графічних засобів мови С. Аналіз основних понять об’єктно-орієнтованого програмування.

    курсовая работа [123,3 K], добавлен 14.03.2013

  • Зчитування числової інформації з файлу DATA.txt, аналізування, обробка та виконання графічного відображення. Редагування файлу тексту програми. Метод відображення кнопки з надписом на екрані. Створення нових класів на основі інших, вже створених.

    курсовая работа [196,2 K], добавлен 14.03.2013

  • Розробка програми на мові програмування С++ з використанням об’єктно-орієнтованого програмування, яка включає в себе роботу з файлами, класами, обробку числової інформації і роботу з графікою. Структура класів і об’єктів. Лістинг та алгоритм програми.

    курсовая работа [104,4 K], добавлен 14.03.2013

  • Модель в об’єктно-орієнтованих мовах програмування. Програмна модель створена на мові програмування С++, в середовищі програмування Borland С++ Builder 6.0. Вибір засобів реалізації програми. Види інструментів для об'єктно-орієнтованої розробки.

    курсовая работа [116,9 K], добавлен 06.06.2010

  • Особливості об'єктно-орієнтованого програмування. Розробка програми для елементарних математичних розрахунків, виведення результату на екран та запису у файлі. Сортування слів у рядку. Програма, яка реалізовує ходи шахових фігур. Програма-калькулятор.

    отчет по практике [2,0 M], добавлен 19.03.2015

  • Об’єктно-орієнтоване програмування мовою С++. Основні принципи об’єктно-орієнтованого програмування. Розробка класів з використанням технології візуального програмування. Розробка класу classProgressBar. Базовий клас font. Методи тестування програми.

    курсовая работа [211,3 K], добавлен 19.08.2010

  • Розробка програми на мові програмування С++ з використанням об'єктно-орієнтованого програмування. Робота з файлами, графікою, класами, обробка числової інформації. Графічні засоби мови програмування. Алгоритм задачі та допоміжні програмні засоби.

    курсовая работа [102,5 K], добавлен 14.03.2013

  • Об'єктно-орієнтоване програмування за допомогою Delphi. Основні види проекцій. Поняття контексту відображення та пристрою в бібліотеці OpenGL. Побудова сфери засобами OpenGL: лістинг програми. Алгоритм операції збільшення та зменшення зображення.

    контрольная работа [268,6 K], добавлен 20.09.2009

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

    курсовая работа [229,4 K], добавлен 09.09.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.