언어/c언어

네이버 지식인 답변

파아랑새 2018. 11. 12. 21:29

# include <stdio.h>


typedef struct {

int left_x;

int left_y;

int right_x;

int right_y;

}RECT;

// function prototype ------------------

void _init_(RECT*);      // func (1)

void insert(RECT*);      // func (2)

void temp_coordi(RECT*); // func (3)

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

int main(void) { 

RECT rect_node;

_init_(&rect_node);

insert(&rect_node);

temp_coordi(&rect_node);

return 0;

} // end of main function

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

void _init_(RECT* param) { // func (1)

// 데이터 초기화

// 좌상단

param->left_x = 0x0;

param->left_y = 0x0;

// 우하단

param->right_x = 0x0;

param->right_y = 0x0;

} // end of _init_ function 

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

void insert(RECT* param) { // func (2)

int temp_x = 0x0;

int temp_y = 0x0;

int flag = 0x0;

printf("좌상단점/우하단점의 좌표를 입력하세요(left, top, right, bottom 순)\n");

scanf("%d %d %d %d", 

&param->left_x, &param->left_y,

&param->right_x, &param->right_y);

printf("입력된 직사각형: 좌상단점=(%d,%d), 우하단점=(%d,%d)\n", 

param->left_x, param->left_y, param->right_x, param->right_y);

while (1) {

if (param->left_x < param->right_x) {

if (param->left_y < param->right_y) {

break;

}

else if (param->left_y > param->right_y) {

// case1-2) 좌상단의 x좌표가 우하단의 x좌표보다 작고

// 좌상단의 y좌표가 우상단의 y좌표보다 큰 경우 

// y좌표를 서로 교체

temp_y = param->left_y;

param->left_y = param->right_y;

param->right_y = temp_y;

flag = 1;

break;

}

else {

// case1-3) 좌상단의 y좌표와 우하단의 y좌표가 서로 같은 경우

printf("사각형 영역을 형성할 수 없습니다.\n");

}

}

else if (param->left_x > param->right_x) {

// 좌상단의 x값이 우하단의 x값보다 더 큰 경우

if (param->left_y < param->right_y) {

// 좌상단의 y값이 우하단의 y값보다 더 작은 경우

// x값을 서로 교체

temp_x = param->left_x;

param->left_x = param->right_x;

param->right_x = temp_x;

flag = 1;

break;

}

else if (param->left_y > param->right_y) {

// 좌상단의 y값이 우하단의 y값보다 더 큰 경우

// 좌상단과 우하단의 좌표를 서로 교체

temp_x = param->left_x;

temp_y = param->left_y;

param->left_x = param->right_x;

param->left_y = param->right_y;

param->right_x = temp_x;

param->right_y = temp_y;

flag = 1;

break;

}

else { // param->left_y == param->right_y

printf("사각형 영역을 형성할 수 없습니다.\n");

}

}

else { // param->left_x == param->right_x

printf("사각형 영역을 형성할 수 없습니다.\n");

}

}

if (flag) {

printf("수정된 직사각형: 좌상단점=(%d,%d), 우하단점=(%d,%d)\n",

param->left_x, param->left_y, param->right_x, param->right_y);

}

} // end of insert function 

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

void temp_coordi(RECT* param) { // func (3)

int temp_x = 0; 

int temp_y = 0;

printf("한점의 좌표를 입력하세요(x, y) : ");

scanf("%d %d", &temp_x, &temp_y);


if (param->left_x <= temp_x && param->right_x >= temp_x) {

if (param->left_y <= temp_y && param->right_y >= temp_y) {

printf("(%d, %d)는 직사각형 내부에 있습니다. \n", temp_x, temp_y);

}

else {

printf("(%d, %d)는 직사각형 내부에 없습니다. \n", temp_x, temp_y);

}

}

else {

printf("(%d, %d)는 직사각형 내부에 없습니다. \n", temp_x, temp_y);

}

} // end of temp_coordi function