interface InterfaceEx1 { double area (); } interface InterfaceEx2 { double perimeter(); } class Figure : InterfaceEx1, InterfaceEx2{ /* dummy class */ double area () { return 0.0;} double perimeter (){ return 0.0;} } class Rectangle : Figure { private import math2; private: double side_1; double side_2; export { double get_side_1() {return side_1;} double get_side_2() {return side_2;} this (){ side_1 = 1.0; side_2 = 1.0; } this (double s1, double s2){ side_1 = s1; side_2 = s2; } double area () out (result){ assert(feq(result, (get_side_1() * get_side_2()))); } body { return (get_side_1() * get_side_2()); } double perimeter (){ return (2 * (get_side_1() + get_side_2())); } } } class Circle: Figure { import math; private: double radius; public { this (){ radius = 1.0; } this (double init_val){ radius = init_val; } double get_radius (){return radius;} double area (){ return (PI * radius * radius); } double perimeter (){ return (PI * 2 * radius); } } } class Triangle : Figure { private import math2; private import math; private: double epsilon = 0.001; double side_a, side_b, side_c; public { this (){ side_a = side_b = side_c = 1.0; } this (double sa, double sb, double ag){ /* Given side a, side b and the enclosing angle */ double angle_gamma = deg2rad(ag); side_a = sa; side_b = sb; side_c = sqrt((sa * sa) + (sb * sb) - 2 * side_a * side_b * cos(angle_gamma)); } double area (){ /* Heron'sche Formel */ double s = ((side_a + side_b + side_c) / 2); return (sqrt(s * (s - side_a) * (s - side_b) * (s - side_c))); } double perimeter (){ return side_a + side_b + side_c; } } } unittest { assert(10.001 == 10.00); assert(feq (rad2deg(deg2rad (90.0)), 90.0)); } import c.stdio; // for sscanf int main (char [] [] args){ char [] v1; char [] v2; double dv1, dv2; sscanf(args[1], "%lf", &dv1); sscanf(args[2], "%lf", &dv2); Figure fig = new Rectangle(dv1, dv2); printf("Rectangle: area = %.2lf, perimeter = %.2lf\n", fig.area(), fig.perimeter()); fig = new Circle(10.0); printf("Circle area = %.2lf, perimeter = %.2lf\n", fig.area(), fig.perimeter()); fig = new Triangle(); printf("Triangle area = %.2lf, perimeter = %.2lf\n", fig.area(), fig.perimeter()); return 0; }