I.Постановка задачи.
Разработать функции, рисующие на экране следующие геометрические фигуры:
– незакрашенную фигуру,
– закрашенную фигуру,
– две вложенных одну в другую фигуры, внешняя фигура закрашена за исключением пространства внутренней фигуры.
Разработать программу, демонстрирующую выполнение указанных функций, обеспечить ввод пользователем параметров фигур (координат и др.), параметров рисуемых линий и закраски. Включить в программу проверки нахождения фигуры в пределах экрана и вложенности двух фигур. Результаты работы программы должны сопровождаться выводом поясняющего сообщения в графическом режиме.
II.Алгоритм.
В программе фигура рисуется функцией circle(x,y,радиус).
Проверка введенных данных осуществляется функцией check_up(x,y,R,maxx,maxy), где R-радиус заданной окружности, maxx и maxy максимальные координаты приобретаемые на экране. Проверка осуществляется следующим образом: если x<0 или y<0 или x>maxx или y>maxy то результат работы функции – ложь(0),
Иначе если x-R<0 или y-R<0 или x+R>maxx или y+R>maxy, то результат работы программы – ложь(0), иначе результат работы – истина(1).
Проверка вложенности производиться функцией check_up_in_put(x, x2, y, y2, R, R2), где x2, y2 – координаты внутренней(меньшей) окружности, а R –её радиус.
Проверка идет следующим образом: если x2<x-R или y2<y-R или x2>x+R или y2>y+R то функция возвращает 0;
иначе если x2-R2<x-R или y2-R2<y-R или x2+R2>x+R или y2+R2>y+R функция возвращает 0;
иначе она возвращает 1;
III.Текст программы.
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
int x,x2,y,y2,R,R2;
void vvod(int*x,int*y,int*R)
{printf("Enter coordinates and radius.");
scanf("%d%d%d",x,y,R);}
/*-------------------------------------------------------------*/
int check_up(int x,int y,int R,int maxx,int maxy)
{
if(x<0||y<0||x>maxx||y>maxy)return 0;
else if(((x-R)<0 || (y-R)<0) || ((x+R)>maxx || (y+R))>maxy)return 0;
else return 1;}
/*-------------------------------------------------------------*/
void colorgraph(int *color)
{printf("\nChoose the color of figure:\n1-Blue\n4-Red\n2-Green\n\n");
scanf("%d",color);}
/****************************************************************/
void othergraph(int*background,int*width)
{printf("\nChoose the background:\n3-Gray\n15-White\n0-Black\n\n");
scanf("%d",background);
printf("\nChoose the width:\n1-Normal\n3-Thick\n\n");
scanf("%d",width);}
/*-------------------------------------------------------------*/
void flooding(int x,int y,int R)
{int color;
circle(x,y,R);
floodfill(x,y,color);}
/*-------------------------------------------------------------*/
void input_flooding(int x2,int y2,int x,int y,int R,int R2,int color)
{int color2;
circle(x,y,R);
floodfill(x,y,color);
color2=14;
setcolor(color2);
circle(x2,y2,R2);
setbkcolor(0);
setfillstyle(SOLID_FILL,7);
floodfill(x2,y2,color2);
}
/*-------------------------------------------------------------*/
int check_up_in_put(int x,int x2,int y,int y2,int R,int R2)
{if((x2<(x-R) || y2<(y-R)) || (x2>(x+R) || y2>(y+R))) return 0;
else if(((x2-R2)<(x-R) || (y2-R2)<(y-R)) || ((x2+R2)>(x+R) || (y2+R2)>(y+R))) return 0;
else return 1;}
/*-------------------------------------------------------------*/
void main()
{ clrscr(); /*ochistka ekrana*/
int gd, gm, error;
int maxx, maxy;
int color,color2;
int background;
int width;
int ch,i,k;
detectgraph(&gd, &gm);
initgraph(&gd, &gm, "Y:\\bc\\BGI");
error=graphresult();
//-----------------proverka na oshibki-----------//
if(error!=grOk)
{
puts("oshibka grafiki");
puts(grapherrormsg(error));
exit(1);
}
//-----------------------------------------------//
maxx=getmaxx();
maxy=getmaxy();
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.