#include #include #define _USE_MATH_DEFINES using namespace std; class vec3d { private: double x,y,z; public: vec3d (double x, double y, double z): x(x),y(y),z(z) {} }; class shape3d: public vec3d { public: shape3d (double x, double y, double z): vec3d (x,y,z) {} virtual double area ()=0; virtual double volume ()=0; }; class sphere: public shape3d { private: double r; public: sphere (double x, double y, double z, double r): shape3d (x,y,z), r(r) {} virtual double area () { return M_PI*4*r*r; } virtual double volume () {return 4*M_PI*r*r*r/3; } }; class box: public shape3d { private: double a,b,c; public: box (double x, double y, double z, double a, double b, double c): shape3d (x,y,z), a(a), b(b), c(c) {} virtual double area () {return 2*a*b+2*b*c+2*a*c;} virtual double volume () {return a*b*c; } }; class cube: public box { public: cube (double x, double y, double z, double a): box (x,y,z,a,a,a) {} }; class prism: public shape3d { private: double n,a,h; public: prism (double x, double y, double z, double n, double a, double h): shape3d (x,y,z), n(n), a(a), h(h) {} virtual double area () {return n*a*a/4*tan((n-2)*M_PI/4/n)*2+n*a*h;} virtual double volume () {return n*a*a/4*tan((n-2)*M_PI/4/n)*h; } }; int main (void) { shape3d *V; double x,y,z,a,b,c,h,r; int t,n; cout<<"input object type: 1 for sphere, 2 for box, 3 for cube, 4 for prism \n"; cin>>t; cout<<"input 3D coordinates\n"; cin>>x; cin>>y; cin>>z; switch (t) { case 1: { cout<<"input r\n"; cin>>r; V=new sphere (x,y,z,r); break; } case 2: { cout<<"input a\n"; cin>>a; cout<<"input b\n"; cin>>b; cout<<"input c\n"; cin>>c; V=new box(x,y,z,a,b,c); break; } case 3: { cout<<"input a\n"; cin>>a; V=new cube(x,y,z,a); break; } case 4: { cout<<"input n (n should be greater then 2)\n"; cin>>n; cout<<"input a\n"; cin>>a; cout<<"input h\n"; cin>>h; V=new prism (x,y,z,n,a,h); break; } default: { cout<<"0 0\n"; return 0; } } cout<<"S="<area()<<"\n"; cout<<"V="<volume()<<"\n"; delete V; return 0; }