Usando la función imaginaria para encontrar el área de superficie y el volumen de N figuras

Defina la clase abstracta Contenedor, que deriva tres clases derivadas: Esfera (cilindro), Cilindro (cilindro) y Cubo (cubo), utilizando funciones virtuales para calcular el área de superficie y el volumen de varios gráficos.

const double PI = 3.1415926;
class Container
{
public:
virtual double surface_area () = 0; // función virtual pura surface_area, calcule el área de superficie del gráfico
volumen doble virtual () = 0; // volumen de función virtual pura, calcule el volumen del gráfico
} ;

Genere la clase anterior y escriba la función principal, de acuerdo con la información de gráficos de entrada, calcule el área de superficie y el volumen de los gráficos y la salida.

Formato de entrada:
ingrese el número N de gráficos en la primera línea, las siguientes N líneas cada línea proporciona la información básica de un polígono, el primer número en cada línea es el tipo del gráfico actual, 1 es la esfera, seguido del radio de la esfera; 2 es un cilindro, seguido de dos números, que son el radio y la altura de la parte inferior del cilindro; 3 es un cubo, y el siguiente número es la longitud lateral del cubo.

Formato de salida:
área de superficie correspondiente y volumen

Entrada de muestra: aquí se proporciona
un conjunto de entradas. Por ejemplo:

3
1 2
2 2 5
3 5

Salida de muestra:
aquí se proporciona la salida correspondiente. Por ejemplo:

Área de la superficie de la esfera: 50.2655, Volumen de la esfera: 33.5103
Área de la superficie del cilindro: 87.9646, Volumen del cilindro: 62.8319
Área de la superficie del cubo: 150, Volumen del cubo: 125

#include <iostream>

using namespace std;
const double PI = 3.1415926;

class Container {
public:
    virtual double surface_area() = 0;  //纯虚函数surface_area,计算图形的表面积
    virtual double volume() = 0;       //纯虚函数volume,计算图形的体积
};

class Sphere : public Container {
private:
    double r;
public:
    void set(double rr) {
        r = rr;
    }

    double surface_area() override {
        return 4 * PI * r * r;
    }

    double volume() override {
        return 4 * PI * r * r * r / 3;
    }
};

class Cylinder : public Container {
private:
    double r, h;
public:
    void set(double rr, double hh) {
        r = rr;
        h = hh;
    }

    double surface_area() override {
        return 2 * PI * r * r + 2 * PI * r * h;
    }

    double volume() override {
        return PI * r * r * h;
    }
};

class Cube : public Container {
private:
    double l;
public:
    void set(double ll) {
        l = ll;
    }

    double surface_area() override {
        return l * l * 6;
    }

    double volume() override {
        return l * l * l;
    }
};

int main() {
    int n, m;
    double a, b;
    Sphere sp;
    Cylinder cy;
    Cube cu;
    cin >> n;
    for (int i = 0; i < n; ++i) {//一开始我用的while,第一个测试点运行超时,试了好久,用for竟然通过了,如果跟我有一样情况的,希望会对你有用
        cin >> m;
        if (m == 1) {
            cin >> a;
            sp.set(a);

            cout << "球体表面积:" << sp.surface_area() << ",球体体积:" << sp.volume()<<endl;
        }
        if (m == 2) {
            cin >> a >> b;
            cy.set(a, b);
            cout << "圆柱体表面积:" << cy.surface_area() << ",圆柱体体积:" << cy.volume()<<endl;
        }
        if (m == 3) {
            cin >> a;
            cu.set(a);
            cout << "正方体表面积:" << cu.surface_area() << ",正方体体积:" << cu.volume()<<endl;
        }
    }
}
Publicado 163 artículos originales · elogiado 18 · visitas 7683

Supongo que te gusta

Origin blog.csdn.net/xcdq_aaa/article/details/105440902
Recomendado
Clasificación