Фильтрация массива объектов по формуле - С++

Rori009

Здравствуйте! Помогите, дописать следующую программу: Задан базовый класс "фигура" и производные классы "треугольник", "прямоугольник" и "окружность". Задан массив параметров, указывающий на фигуру и содержащий её характеристики. Пример: 3 Т 3 4 5 С 3 R 5 6 Необходимо отфильтровать фигуры по формуле: s*s-3*p>m, где m - элемент, вводимый с клавиатуры. На экран выводятся параметры фигур, удовлетворяющих формуле. Пример: C 3 R 5 6Часть программы есть, не знаю, как оформить функцию с формулой и организовать фильтрацию с выводом.Файл F.h:
#pragma once
#include <ostream>
using namespace std;
class F {
public:
    char N[5];
    ****** p, s;
    F();
    virtual void sqw() = 0;
    virtual void per() = 0;
    virtual void prn(ostream&) = 0;
};
class T : public F {
    ****** a, b, c;
public:
    T(******, ******, ******);
    void per();
    void sqw();
    void prn(ostream&);
};
class C : public F {
    ****** r;
    ****** pi;
public:
    C(******);
    void per();
    void sqw();
    void prn(ostream&);
};
class R : public F {
    ****** a, b;
public:
    R(******, ******);
    void per();
    void sqw();
    void prn(ostream&);
};
Файл F.cpp:
#include <math.h>
#include "F.h"
 
F::F() {
    for (int i = 0; i < 5; ++i)
        N[i] = 0;
}
T::T(****** A = 0, ****** B = 0, ****** C = 0) {
    N[0] = 'T';
    a = A;
    b = B;
    c = C;
    per();
    sqw();
}
void T::per() {
    p = a + b + c;
}
void T::sqw() {
    ****** pp = p / 2;
    s = sqrt(pp * (pp - a) * (pp - b) * (pp - c));
}
void T::prn(std::ostream& out) {
    out << N << "; " << a << " " << b << " " << c << " " << std::endl;
}
C::C(****** R = 0) {
    N[0] = 'C';
    r = R;
    pi = 3.1415926;
}
void C::per() { 
    p = 2 * pi * r; 
}
void C::sqw() {
    s = pi * r * r;
}
void C::prn(ostream& out) {
    out << N << "; " << r << endl;
}
R::R(****** A = 0, ****** B = 0) {
    N[0] = 'R';
    a = A;
    b = B;
}
void R::per() {
    p = 2 * (a + b);
}
void R::sqw() {
    s = a * b;
}
void R::prn(ostream& out) {
    out << N << "; " << a << " " << b << endl;
}
Файл main.cpp:
#include <fstream>
#include <iostream>
#include "F.h"
#include "F.cpp"
using namespace std;
ifstream in("in.txt");
ofstream out("out.txt");
F* ApF[10];
 
int main() {
    int n;
    ****** a, b, c, r;
    char name;
    in >> n;
    for (int i = 0; i < n; ++i) {
        in >> name;
        switch (name) {
        case 'T': in >> a >> b >> c;
            ApF[i] = new T(a, b, c);
            break;
        case 'C': in >> r;
            ApF[i] = new C(r);
            break;
        case 'R': in >> a >> b;
            ApF[i] = new R(a,b);
            break;
        } // switch
    } // for
Int m;
cin >>m;
    for (int i = 0; i < n; ++i) {
        if ( "условие" )
            ApF[i]->prn(out);
    }
    in.close();
    out.close();
    return 0;
}
Желательно самый простой способ и с комментариями. Заранее спасибо.
3 ответа

Rori009

if (ApF[i]->s * ApF[i]->s - 3 * ApF[i]->p > m)


Rori009

Спасибо, все получилосьnmcf, а не подскажете еще, как упорядочить фигуры по увеличению площади?


Rori009

Обычной сортировкой.