![]() ![]() | 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; }