// Description: Macros to calculate the perimeter (distance around)
// of six two-dimensional shapes.
//
// Shapes covered:
// a. Triangle
// b. Square
// c. Rectangle
// d. Quadrilateral
// e. Circle
// f. Sector
//
//**************************************************************
#include <stdio.h>
// PI constant used for circle and sector calculations
#define PI 3.14159265358979323846
//**************************************************************
// Perimeter Macros
//
// a. Triangle
// Perimeter = sum of all three sides
// Parameters: a, b, c (lengths of the three sides)
//
// b. Square
// Perimeter = 4 times the length of one side
// Parameters: s (side length)
//
// c. Rectangle
// Perimeter = 2 times (length + width)
// Parameters: l (length), w (width)
//
// d. Quadrilateral
// Perimeter = sum of all four sides
// Parameters: a, b, c, d (lengths of the four sides)
//
// e. Circle (circumference)
// Perimeter = 2 * PI * radius
// Parameters: r (radius)
//
// f. Sector
// Perimeter = 2 * radius + arc length
// = 2r + (theta * r)
// = r * (2 + theta)
// Parameters: r (radius), theta (central angle in RADIANS)
//
//**************************************************************
#define PERIMETER_TRIANGLE(a, b, c) ((a) + (b) + (c))
#define PERIMETER_SQUARE(s) (4 * (s))
#define PERIMETER_RECTANGLE(l, w) (2 * ((l) + (w)))
#define PERIMETER_QUADRILATERAL(a, b, c, d) ((a) + (b) + (c) + (d))
#define PERIMETER_CIRCLE(r) (2 * PI * (r))
#define PERIMETER_SECTOR(r, theta) ((r) * (2 + (theta)))
//**************************************************************
// main - tests each macro with sample values
//**************************************************************
int main ()
{
// --- a. Triangle ---
// sides: 3, 4, 5 => expected: 12
printf("a. Triangle Perimeter : %.2f\n",
(double) PERIMETER_TRIANGLE(3, 4, 5));
// --- b. Square ---
// side: 5 => expected: 20
printf("b. Square Perimeter : %.2f\n",
(double) PERIMETER_SQUARE(5));
// --- c. Rectangle ---
// length: 8, width: 3 => expected: 22
printf("c. Rectangle Perimeter : %.2f\n",
(double) PERIMETER_RECTANGLE(8, 3));
// --- d. Quadrilateral ---
// sides: 4, 6, 5, 7 => expected: 22
printf("d. Quadrilateral Perimeter : %.2f\n",
(double) PERIMETER_QUADRILATERAL(4, 6, 5, 7));
// --- e. Circle ---
// radius: 7 => expected: 2 * PI * 7 = 43.98
printf("e. Circle Perimeter : %.2f\n",
PERIMETER_CIRCLE(7.0));
// --- f. Sector ---
// radius: 5, theta: PI/3 (60 degrees)
// expected: 5 * (2 + PI/3) = 5 * 3.0472 = 15.24
printf("f. Sector Perimeter : %.2f\n",
PERIMETER_SECTOR(5.0, PI / 3));
return 0;
} // main