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;
}
Вот это условие, скорее всего, должно выглядеть так:
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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP