Об’єктно-орієнтоване програмування
Розробка на мові програмування 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