Tilbage til slide -- Tastaturgenvej: 'u'        næste -- Tastaturgenvej: 'n'          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;
}