| 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;
}