TransWikia.com

Программа выдает неправильный конечный результат

Stack Overflow на русском Asked by Sergo on December 18, 2020

Программа должна принимать данные о фигурах и считать их объемы, после чего спрашивает разброс в объеме Q P, и по нему собирает все подходящие фигуры и выводит на экран только их.
Но все if`ы в конце не работают…
Помогите кто может.

#include <iostream>
#include <string>
#include <cmath>
using namespace std;

#define MAX 10

class Figure
{
private:
    double a, b, c, p, r, h, x, volume;
    string type;
    string name;
public:
    void getDetailsCubes(void);
    void getDetailsParallelepipeds(void);
    void getDetailsCones(void);
    void printDetailsCubes(void);
    void printDetailsParallelepipeds(void);
    void printDetailsCones(void);
    double CountOfVolumeCube()
    {
        return x * x * x;
    }
    double CountOfVolumeParallelepiped()
    {
        return a * b * c;
    };
    double CountOfVolumeCone()
    {
        return (3.14*r*r*h)/3;
    };
};
    void Figure::getDetailsCubes(void) {
    cout << "Enter name of Cube: ";
    cin >> name;
    cout << "Enter value of side X: ";
    cin >> x;
};

void Figure::getDetailsParallelepipeds(void) {
    cout << "Enter name of Parallelepiped: ";
    cin >> name;
    cout << "Enter value of side A: ";
    cin >> a;
    cout << "Enter value of side B: ";
    cin >> b;
    cout << "Enter value of side C: ";
    cin >> c;

};
void Figure::getDetailsCones(void) {
    cout << "Enter name of Cone: ";
    cin >> name;
    cout << "Enter value of height: ";
    cin >> h;
    cout << "Enter value of radius: ";
    cin >> r;
};
void Figure::printDetailsCubes(void) {
    cout << "Figure info:n";
    cout << "Name:" << name << ", X:" << x << ", Volume of Cube: " << 
Figure::CountOfVolumeCube() << endl;
}
void Figure::printDetailsParallelepipeds(void) {
    cout << "Figure info:n";
    cout << "Name:" << name << ", A:" << a << ", B:" << b << ", C:" << c << ", Volume of Parallelepiped:" << CountOfVolumeParallelepiped() << endl;
}
void Figure::printDetailsCones(void) {
    cout << "Figure info:n";
    cout << "Name:" << name << ", H:" << h << ", R:" << r << "Volume of 
Cone:" << CountOfVolumeCone() << endl;
}
int main()
{

    Figure prd[MAX];
    int n, i;
    double q, p, cbvolume, prvolume, cnvolume, volume;
    cout << "Enter total number of CUBES: ";
    cin >> n;

    for (i = 0; i < n; i++) {
        cout << "Enter info of CUBES: " << i + 1 << ":n";
        prd[i].getDetailsCubes();
    };
    cout << endl;

    cout << "Enter total number of PARALLELEPIPEDS: ";
    cin >> n;
    for (i = 0; i < n; i++) {
        cout << "Enter info of  " << i + 1 << ":n";
        prd[i].getDetailsParallelepipeds();
    };
    cout << endl;

    cout << "Enter total number of CONES: ";
    cin >> n;
    for (i = 0; i < n; i++) {
        cout << "Enter info of Cubes " << i + 1 << ":n";
        prd[i].getDetailsCones();
    }
    cout << endl;

    for (i = 0; i < n; i++) {
        cout << "Info of Cubes " << (i + 1) << ":n";
        prd[i].printDetailsCubes();
    }
    for (i = 0; i < n; i++) {
        cout << "Info of Parallelepipeds " << (i + 1) << ":n";
        prd[i].printDetailsParallelepipeds();
    }
    for (i = 0; i < n; i++) {
        cout << "Info of Cones " << (i + 1) << ":n";
        prd[i].printDetailsCones();
    }
    cout << "Enter range of volume Q P:";
    cin >> q >> p;
    if (q<=prd[i].CountOfVolumeCube() and prd[i].CountOfVolumeCube() < p) {
        cout << "suitable Cubes for this range " << ":n";
        prd[i].printDetailsCubes();
        }
    if (q <= prd[i].CountOfVolumeParallelepiped() and prd[i].CountOfVolumeParallelepiped() <= p) {
        cout << "suitable Parallelepipeds for this range " << ":n";
        prd[i].printDetailsParallelepipeds();
    }
    if (q <= prd[i].CountOfVolumeCone() and prd[i].CountOfVolumeCone() <= p) {
        cout << "suitable Cones for this range " << ":n";
        prd[i].printDetailsCones();
    }
    return 0;
}

One Answer

Вот это условие, скорее всего, должно выглядеть так:

if ((q <= prd[i].CountOfVolumeCube() and prd[i].CountOfVolumeCube() <= p) and 
    (q <= prd[i].CountOfVolumeParallelepiped() and prd[i].CountOfVolumeParallelepiped() <= p) and
    (q <= prd[i].CountOfVolumeCone() and prd[i].CountOfVolumeCone() <= p))

Чтобы избежать таких длинных условий, их можно поместить в отдельную функцию или завести три булевых переменных, в которые записать результат каждой проверки. Примерно так:

bool condition1 = (q <= prd[i].CountOfVolumeCube() and prd[i].CountOfVolumeCube() <= p);
bool condition2 = (q <= prd[i].CountOfVolumeParallelepiped() and prd[i].CountOfVolumeParallelepiped() <= p);
bool condition3 = (q <= prd[i].CountOfVolumeCone() and prd[i].CountOfVolumeCone() <= p)

if (condition1 && condition2 && condition3)
{
    // Do something
}

// Или так
// if (condition1 and condition2 and condition3)

Ну и всё это должно быть в цикле, а у Вас в коде цикла нет и переменная i будет иметь значение n.

Correct answer by EOF on December 18, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP