#include <iostream>
using namespace std;
class Shape {
public:
virtual double area() = 0;
virtual ~Shape() {}
};
class Circle : public Shape {
double r;
public:
Circle(double radius) : r(radius) {}
double area() { return 3.14 * r * r; }
};
class Rectangle : public Shape {
double w, h;
public:
Rectangle(double width, double height) : w(width), h(height) {}
double area() { return w * h; }
};
class Triangle : public Shape {
double b, h;
public:
Triangle(double base, double height) : b(base), h(height) {}
double area() { return 0.5 * b * h; }
};
void printArea(Shape* shape) {
cout << shape->area() << endl;
}
int main() {
Circle c(5);
Rectangle r(4, 6);
Triangle t(3, 4);
printArea(&c);
printArea(&r);
printArea(&t);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgU2hhcGUgewpwdWJsaWM6CiAgICB2aXJ0dWFsIGRvdWJsZSBhcmVhKCkgPSAwOwogICAgdmlydHVhbCB+U2hhcGUoKSB7fQp9OwoKY2xhc3MgQ2lyY2xlIDogcHVibGljIFNoYXBlIHsKICAgIGRvdWJsZSByOwpwdWJsaWM6CiAgICBDaXJjbGUoZG91YmxlIHJhZGl1cykgOiByKHJhZGl1cykge30KICAgIGRvdWJsZSBhcmVhKCkgeyByZXR1cm4gMy4xNCAqIHIgKiByOyB9Cn07CgpjbGFzcyBSZWN0YW5nbGUgOiBwdWJsaWMgU2hhcGUgewogICAgZG91YmxlIHcsIGg7CnB1YmxpYzoKICAgIFJlY3RhbmdsZShkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpIDogdyh3aWR0aCksIGgoaGVpZ2h0KSB7fQogICAgZG91YmxlIGFyZWEoKSB7IHJldHVybiB3ICogaDsgfQp9OwoKY2xhc3MgVHJpYW5nbGUgOiBwdWJsaWMgU2hhcGUgewogICAgZG91YmxlIGIsIGg7CnB1YmxpYzoKICAgIFRyaWFuZ2xlKGRvdWJsZSBiYXNlLCBkb3VibGUgaGVpZ2h0KSA6IGIoYmFzZSksIGgoaGVpZ2h0KSB7fQogICAgZG91YmxlIGFyZWEoKSB7IHJldHVybiAwLjUgKiBiICogaDsgfQp9OwoKdm9pZCBwcmludEFyZWEoU2hhcGUqIHNoYXBlKSB7CiAgICBjb3V0IDw8IHNoYXBlLT5hcmVhKCkgPDwgZW5kbDsKfQoKaW50IG1haW4oKSB7CiAgICBDaXJjbGUgYyg1KTsKICAgIFJlY3RhbmdsZSByKDQsIDYpOwogICAgVHJpYW5nbGUgdCgzLCA0KTsKCiAgICBwcmludEFyZWEoJmMpOwogICAgcHJpbnRBcmVhKCZyKTsKICAgIHByaW50QXJlYSgmdCk7CgogICAgcmV0dXJuIDA7Cn0=