#include "iostream.h"

class TFigure
{
    public:
    TFigure(const char *s = ""): name(s)
    {
        cout << name << " created ..." << endl;
    }

    //Перемещение фигуры
    void move_it(char *s,int step_x,int step_y)
    {
        int n;
        if (s=="triangle") n=3;
        else n=5;
        for(int i=0;i<n;i++)
        {
            TPoint[i].x+=step_x;
            TPoint[i].y+=step_y;
        }

    //текущая позиция
    void show_position(char *s)
    {
        cout<<s<< "in position:";
        int n;
        if (s=="triangle") n=3;
        else n=5;
        for(int i=0;i<n;i++)
        {
            cout << " (" <<TPoint[i].x <<";"<<TPoint[i].y << ") ";
        }
    }

    struct TPoint
    {
        // Конструктор по умолчанию
        TPoint(int px = 0, int py = 0): x(px), y(py)
        {
        }
        int x, y;
    };

    virtual double getS() const = 0;

    private:
    const char *name;// Название фигуры

};

// Определяем класс - наследник от TFigure
class TTriangle: public TFigure
{
    private:
    TPoint *pts;
    public:
    TTriangle(TPoint p1,TPoint p2,TPoint p3):TFigure("triangle") //конструктор
    {
        pts = new TPoint[3]; //создаём массив
        for(int i=0;i<3;i++)
        {
            cout << "Enter coordinates of apex" << i+1 << ":";
            cin << TPoint[i].x << TPoint[i].y;
        }
    }

    ~TTriangle()//деструктор
    {
        delete [] pts; // удаляем массив
    }

    //вычисление площади
    double getS() const
    {
    return 0.5*(TPoint[1].y*TPoint[2].x-TPoint[2].y*TPoint[1].x+TPoint[2].y*TPoint[3].x-
                     TPoint[3].y*TPoint[2].x-TPoint[1].y*TPoint[3].x+TPoint[1].y*TPoint[1].x);
    }

};

class TPentagon: public TFigure
{
    public:
    TPentagon(TPoint p1,TPoint p2,TPoint p3,TPoint p4,TPoint p5):TFigure("pentagon") //конструктор
    {
        pts = new TPoint[5]; //создаём массив
        for(int i=0;i<5;i++)
        {
            cout << "Enter coordinates of apex" << i+1 << ":";
            cin << TPoint[i].x << TPoint[i].y;
        }
    }

    ~TTriangle()//деструктор
    {
        delete [] pts; // удаляем массив
    }

    //вычисление площади
    double getS() const {
    return 12.0;}

};

char Compare(const TFigure &T1, const TFigure &T2)
{
    return (T1.getS() < T2.getS()) ? "<" : ">";
}


int main() {

  TTriangle T1;
  show_position("triangle");//смотрим позицию
  cout << T1.getS() << endl;//печатем площадь
  move_it("triangle",2,2);.//перемещаем
  show_position("triangle");//смотрим позицию
  cout << T1.getS() << endl;//проверяем площадь

  TPentagon T2;
  show_position("pentagon");//смотрим позицию
  cout << T2.getS() << endl;//печаетаем площадь
  move_it("pentagon",2,2);.//перемещаем
  show_position("pentagon");//смотрим позицию
  cout << T2.getS() << endl;//проверяем площадь

  cout << Compare(T1, T2) << endl;
  cout << Compare(T2, T1) << endl;//результаты должны быть разными

  return 0;

}