본문 바로가기

C 언어/연습문제

C언어 연습문제5

[문제]

프로그램 사용자로부터 두 점의 x, y 좌표를 입력 받아서, 두 점이 이루는 직사각형의 넓이를 계산하여 출력하는 프로그램을 작성해보자. 단, 좌 하단의 x, y 좌표 값이 우 상단의 x, y좌표 값보다 작아야 한다. 좌 하단의 좌표정보를 먼저 입력 받는 형태로 우 상단의 값이 잘못들어오는 경우 

 

[실행결과]

좌 하단의 x, y 좌표: 2 4
우 상단의 x, y 좌표: 1 6
좌 하단의 x좌표가 우 상단의 x좌표보다 큽니다.
우 상단의 x, y 좌표: 4 2
좌 하단의 y좌표가 우 상단의 y좌표보다 큽니다.
우 상단의 x, y 좌표: 1 2
좌 하단의 x, y좌표가 우 상단의 x, y좌표보다 큽니다.
우 상단의 x, y 좌표: 4 8
두 점이 이루는 직사각형의 넓이는 8입니다.

 

[코드1]

#include<stdio.h>

int main(void)
{
	int l_x, l_y, r_x, r_y;
	int Istrue = 1;

	printf("좌 하단의 x, y좌표: ");
	scanf_s("%d %d", &l_x, &l_y);

	while (Istrue)
	{
		printf("우 상단의 x, y좌표: ");
		scanf_s("%d %d", &r_x, &r_y);

		if (l_x >= r_x && l_y < r_y)
			printf("좌 하단의 x좌표가 우 상단의 x좌표보다 큽니다.\n");
		else if (l_y >= r_y && l_x < r_x)
			printf("좌 하단의 y좌표가 우 상단의 y좌표보다 큽니다.\n");
		else if (l_x >= r_x && l_y >= r_y)
			printf("좌 하단의 x, y좌표가 우 상단의 x, y좌표보다 큽니다.\n");
		else
			Istrue = 0;
	}
	printf("두 점이 이루는 직사각형의 넓이는 %d입니다.", (r_x - l_x) * (r_y - l_y));

	return 0;
}

 

[코드2]

#include<stdio.h>

typedef struct point
{
	int xpos;
	int ypos;
}Point;

int IsError(Point* left, Point* right);
int CalArea(Point* left, Point* right);

int main(void)
{
	Point leftPo, rightPo;

	printf("좌 하단의 x, y 좌표입력: ");
	scanf_s("%d %d", &leftPo.xpos, &leftPo.ypos);

	while (1)
	{
		printf("우 상단의 x, y 좌표입력: ");
		scanf_s("%d %d", &rightPo.xpos, &rightPo.ypos);
		if (!IsError(&leftPo, &rightPo))	break;
	}
	printf("두 점이 이루는 직사각형의 넓이는 %d입니다.", CalArea(&leftPo, &rightPo));

	return 0;
}

int IsError(Point* left, Point* right)
{
	int err_x = 0, err_y = 0;

	if (left->xpos > right->xpos)	err_x = 1; // x좌표 에러
	if (left->ypos > right->ypos)	err_y = 1; // y좌표 에러
	
	if (err_x + err_y > 0)
	{
		if (err_x + err_y == 2)	printf("좌 하단의 x,y좌표가 우 상단의 x,y좌표보다 큽니다.\n");
		else
		{
			if (err_x == 1)	printf("좌 하단의 x좌표가 우 상단의 x좌표보다 큽니다.\n");
			if (err_y == 1) printf("좌 하단의 y좌표가 우 상단의 y좌표보다 큽니다.\n");
		}
		return 1; // 에러 발생
	}
	return 0; // 에러 없음
}

int CalArea(Point* left, Point* right)
{
	return (right->xpos - left->xpos) * (right->ypos - left->ypos);
}

 

<참고>

윤성우의 열혈 C 프로그래밍

'C 언어 > 연습문제' 카테고리의 다른 글

C언어 연습문제7  (0) 2021.11.10
C언어 연습문제6  (0) 2021.11.10
C언어 연습문제4  (2) 2021.10.26
C언어 연습문제3  (0) 2021.10.26
C언어 연습문제2  (0) 2021.10.25