직사각형의 왼쪽 아래의 x, y 좌표와 가로의 길이 세로의 길이를 저장할 수 있는 구조체 자료형을 만들고 두 개의 직사각형 자료를 입력받아 두 직사각형을 포함하는 최소의 직사각형 자료를 구하여 구조체 변수에 저장하고 출력하는 프로그램을 작성하시오.
단, 모든 입력값은 100을 넘지 않는다.
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define MAX 10
struct pos
{
int xpos;
int ypos;
int wid;
int len;
};
void change(int d)
{
int space=0;
int wall=1;
int otherw=2;
int sumw=3;
int setcolor[4]={15,13,11,10};
HANDLE hConsole;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, setcolor[d]);
char str[4][3]={"■","■","■","■"};
printf("%s",&str[d][0]);
}//change
int main(void)
{
struct pos x1,x2,b;
int arr[MAX][MAX];
int i,j;
int brx,bry;
int rx1,ry1,rx2,ry2;
printf("두 개의 직사각형 자료를 입력하시오.(단, 모든 입력값은 100을 넘지 않는다.)\n");
scanf("%d %d %d %d",&x1.xpos,&x1.ypos,&x1.wid,&x1.len);
scanf("%d %d %d %d",&x2.xpos,&x2.ypos,&x2.wid,&x2.len);
printf("\n");
for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)
arr[i][j]=0;
rx1=x1.xpos+x1.wid-1;
ry1=x1.ypos+x1.len-1;
rx2=x2.xpos+x2.wid-1;
ry2=x2.ypos+x2.len-1;
for(i=x1.ypos;i<ry1+1;i++)
for(j=x1.xpos;j<rx1+1;j++)
arr[i][j]++;
for(i=x2.ypos;i<ry2+1;i++)
for(j=x2.xpos;j<rx2+1;j++)
arr[i][j]++;
for(i=MAX-1;i>=0;i--)
{
for(j=0;j<MAX;j++)
change(arr[i][j]);
printf("\n");
}
printf("\n두 개의 직사각형\n\n");
if(x1.xpos<x2.xpos)
b.xpos=x1.xpos;
else
b.xpos=x2.xpos;
if(x1.ypos<x2.ypos)
b.ypos=x1.ypos;
else
b.ypos=x2.ypos;
if(rx1>rx2)
brx=rx1;
else
brx=rx2;
if(ry1>ry2)
bry=ry1;
else
bry=ry2;
b.wid=brx-b.xpos+1;
b.len=bry-b.ypos+1;
for(i=b.ypos;i<bry+1;i++)
for(j=b.xpos;j<brx+1;j++)
arr[i][j]=3;
for(i=MAX-1;i>=0;i--)
{
for(j=0;j<MAX;j++)
change(arr[i][j]);
printf("\n");
}
printf("\n두 직사각형을 포함하는 최소 직사각형\n\n");
system("pause");
return 0;
}