| structures/geometric-forms.c - En geometrisk form som enten er en cirkel eller et rektangel. | Lektion 12 - slide 16 : 36 Program 1 |
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.14159
struct point {
double x, y;
};
struct circle {
struct point center;
double radius;
};
struct rectangle {
struct point upper_left, lower_right;
};
enum geometric_kind {circle, rectangle};
struct geometric_form{
enum geometric_kind kind;
union {
struct circle circle;
struct rectangle rectangle;
} form;
};
double area(struct geometric_form f){
double result;
if (f.kind == circle)
result = f.form.circle.radius * f.form.circle.radius * PI;
else if (f.kind == rectangle)
result = fabs(f.form.rectangle.upper_left.x - f.form.rectangle.lower_right.x) *
fabs(f.form.rectangle.upper_left.y - f.form.rectangle.lower_right.y);
else {
printf("Should not happen. Bye\n");
exit(1);
}
return result;
}
int main(void) {
struct geometric_form gf1, gf2;
gf1.kind = circle;
gf1.form.circle.radius = 5.0;
gf1.form.circle.center.x = 0.0;
gf1.form.circle.center.y = 0.0;
printf("Area of gf1: %f\n", area(gf1));
gf2.kind = rectangle;
gf2.form.rectangle.upper_left.x = 1.0;
gf2.form.rectangle.upper_left.y = 1.0;
gf2.form.rectangle.lower_right.x = 4.0;
gf2.form.rectangle.lower_right.y = 4.0;
printf("Area of gf2: %f\n", area(gf2));
return 0;
}