728x90
지난 시간에 이어서 구조체를 활용한 다각형 둘레 구하기를 해보자. 구현에 필요한 조건은 다음과 같다.
1. 2차원 정수 좌표(x, y)를 요소로 갖는 point struct를 선언
2. 각 꼭짓점의 좌표 배열과 꼭짓점의 개수를 담은 polygon struct를 선언
3. polygon 내 배열의 좌표를 순차적으로 접근하며 변의 길이를 구하는 함수 구현
point
struct point { double x, y; };
좌표는 정수로 받지만 변의 길이는 실수가 나올 수 있으니 double로 선언한다.
polygon
struct polygon { point points[20]; size_t vertex; };
최대 이십각형까지로 한다. vertex는 다각형의 꼭짓점의 개수를 의미한다.
두 좌표 간 거리
double diff(point const* a, point const* b) {
double dx = a->x - b->x;
double dy = a->y - b->y;
return sqrt(dx * dx + dy * dy);
}
구조체의 메모리 주소로 요소에 접근하여 꼭짓점 사이의 거리를 구한다.
변의 합
double perimeter(polygon const* p) {
double ans = diff(&p->points[0], &p->points[p->vertex - 1]);
for (size_t i = 0; i < p->vertex - 1; i++) {
ans += diff(&p->points[i], &p->points[i + 1]);
}
return ans;
}
polygon struct에는 모든 데이터가 들어 있으니 메모리 주소만 인자로 받아오면 된다. 다각형의 마지막 좌표와 첫 번째 좌표를 잇는 변의 길이로 초기화해 주고, 이웃하는 변의 길이를 순차적으로 더해준다.
사용 예시
int main()
{
using namespace std;
polygon triangle = { .points = {{2, -2}, {-1, -2}, {-1, 2}}, .vertex = 3 };
cout << perimeter(&triangle) << endl;
return 0;
}
// output: 12
728x90
'Computer Science and Engineering > OOP (Object Oriented Programming)' 카테고리의 다른 글
[Syntax, C++] Reference(&) - 참조란? (0) | 2023.05.22 |
---|---|
[Syntax, C++] struct, enum, union을 활용하여 계산기 구현하기 (0) | 2023.05.02 |
[Syntax, C++] struct, enum class를 활용하여 날짜(D - day) 계산하기 (0) | 2023.04.27 |
[Syntax, C++] Array에서의 Pointer (0) | 2023.03.21 |
[Syntax, C++] 입력값과 선언한 자료형이 다를 때는 어떻게 처리해야 할까? (with simple I/O, ignore and clea (0) | 2023.03.14 |