line (x[3],y[3],x[4],y[4]);
line (x[4],y[4],x[1],y[1]);
chkbndscr();
}
void ParalShort()
{
line (x[1],y[1],x[2],y[2]);
line (x[2],y[2],x[3],y[3]);
line (x[3],y[3],x[4],y[4]);
line (x[4],y[4],x[1],y[1]);
}
int GoodIns()
{
float S, S1=0, a,b,c,p,sin;
int i,j, flag;
a=sqrt(pow((x[4]-x[1]),2)+pow((y[4]-y[1]),2));
b=sqrt(pow((x[2]-x[1]),2)+pow((y[2]-y[1]),2));
sin=sqrt(1-pow((abs((x[4]-x[1])*(x[2]-x[1])+(y[4]-y[1])*(y[2]-y[1]))/a/b),2));
S=sin*a*b;
flag=0;
for (j=1;j<5;j++)
{
for (i=5;i<8;i++)
{
if (i<8)
{
a=sqrt(pow((x[i]-x[i+1]),2)+pow((y[i]-y[i+1]),2));
b=sqrt(pow((x[i]-x[j]),2)+pow((y[i]-y[j]),2));
c=sqrt(pow((x[i+1]-x[j]),2)+pow((y[i+1]-y[j]),2));
}
else
{
a=sqrt(pow((x[5]-x[8]),2)+pow((y[5]-y[8]),2));
b=sqrt(pow((x[5]-x[j]),2)+pow((y[5]-y[j]),2));
c=sqrt(pow((x[8]-x[j]),2)+pow((y[8]-y[j]),2));
}
p=(a+b+c)/2;
S1=S1+sqrt(p*(p-a)*(p-b)*(p-c));
}
if (S<S1) {flag=1;}
S1=0;
}
if (flag==1) return 0;
else return 1;
}
void colorParal()
{
int tl;
tl=typeLine; //zapomnili real type
typeLine=0; //sdelali type splo6nim
Parallelogram();
setfillstyle(typeFill,colorFill);
floodfill((x[1]+x[3])/2,(y[1]+y[3])/2,colorLine); //zalili parm
setcolor(0);
setlinestyle(0,0,fatLine);
ParalShort(); //granica 4ernaya
setcolor(colorLine);
typeLine=tl;
setlinestyle(typeLine,0,fatLine);
ParalShort(); //granica nuzhnaya
}
void cutParal()
{
colorParal();
printf("Please Enter the coordinates (x,y) of the paral which is supposed to be in ");
scanf("%d%d%d%d%d%d", &x[5],&y[5],&x[6],&y[6],&x[7],&y[7]);
setlinestyle (0,0,fatLine);
x[8]=x[5]+x[7]-x[6];
y[8]=y[5]+y[7]-y[6];
setcolor(colorLine);
line (x[5],y[5],x[6],y[6]);
line (x[6],y[6],x[7],y[7]);
line (x[7],y[7],x[8],y[8]);
line (x[8],y[8],x[5],y[5]);
if (!GoodIns())
{
setcolor(4);
settextstyle(2,0,6);
outtextxy (150,100,"Error!!! Second Paral does not belong to the First one!");
}
else
{
setfillstyle(1,0);
floodfill((x[5]+x[7])/2,(y[5]+y[7])/2,colorLine);
}
}
void Options()
{
int i;
do
{
printf ("LINE:\n 1 - Fat\n 2 - Type\n 3 - Color \n\nFILL:\n 4 - Type\n 5 - Color\n\n 0 - Back\n");
scanf ("%d",&i);
if (i>0) printf ("Please Enter - ");
switch (i)
{
case 1: scanf ("%d",&fatLine); break;
case 2: scanf ("%d",&typeLine); break;
case 3: scanf ("%d",&colorLine); break;
case 4: scanf ("%d",&typeFill); break;
case 5: scanf ("%d",&colorFill); break;
case 0: break;
}
}while (i>0);
}
void Menu()
{
int i;
do
{
printf ("Please enter:\n1 - Parallelogram\n2 - ColorParal\n3 - CutParal\n\n4 - GraphicOptions\n\n0 - EXIT\n");
scanf ("%d",&i);
switch (i)
{
case 1: setgraphmode(gmode); Parallelogram(); break;
case 2: setgraphmode(gmode); colorParal(); break;
case 3: setgraphmode(gmode); cutParal(); break;
case 4: restorecrtmode(); Options(); break;
default: break;
}
if (i>4) getch();
}
while (i>0);
}
void main()
{int gdriver = DETECT, errorcode;
initgraph(&gdriver, &gmode, "D:\\TurboC\\bgi");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
Menu();
closegraph();
}
5. Набор тестов
№ |
Введенные данные: координаты (x,y) трех точек; |
Результат |
1 |
200 250 250 200 400 200 |
Пустой параллелограмм |
2 |
200 500 250 200 400 200 |
Пустой параллелограмм, вышедший за границу экрана, сообщение об ошибке |
3 |
200 300 250 200 400 200 205 295 255 205 395 205 |
Два вложенных параллелограмма |
4 |
200 250 250 200 400 200 |
Залитый параллелограмм |
5 |
200 300 250 200 400 200 100 295 255 205 395 205 |
Два невложенных параллелограмма и сообщение об ошибке |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.