#include <iostream>
#include <vector>
#include <list>
#include <string>
class Punkt{
public:
Punkt(float x, float y) : x(x), y(y) { }
float zwrocX(){ return this->x; }
float zwrocY(){ return this->y; }
private:
float x;
float y;
};
class Odcinek{
public:
Odcinek(const Punkt& p1, const Punkt& p2) : p1(p1), p2(p2) {}
Punkt zwrocP1(){ return this->p1; }
Punkt zwrocP2(){ return this->p2; }
private:
Punkt p1;
Punkt p2;
};
class Figura{
public:
void wypiszKrawedzie(){
std::cout << "Wspolrzedne krawedzi figury: " << this->nazwa << "\n";
for(unsigned i=0;i<this->odcinki.size();i++)
std::cout << "K[" << i + 1 << "] = (" << this->odcinki[i].zwrocP1().zwrocX() <<
", " << this->odcinki[i].zwrocP1().zwrocY() << "), (" << this->odcinki[i].zwrocP2().zwrocX() <<
", " << this->odcinki[i].zwrocP2().zwrocY() << ")\n";
}
protected:
std::vector<Odcinek> odcinki;
std::string nazwa;
};
class Trojkat : public Figura{
public:
Trojkat(const Odcinek& a, const Odcinek& b, const Odcinek& c, std::string nazwa){
this->odcinki.push_back(a);
this->odcinki.push_back(b);
this->odcinki.push_back(c);
this->nazwa = nazwa;
}
};
class Kwadrat : public Figura{
public:
Kwadrat(const Odcinek& a, const Odcinek& b, const Odcinek& c, const Odcinek& d, std::string nazwa){
this->odcinki.push_back(a);
this->odcinki.push_back(b);
this->odcinki.push_back(c);
this->odcinki.push_back(d);
this->nazwa = nazwa;
}
};
template<class T> class Lista{
public:
void dodaj(const T &figura){ this->listaFigur.push_back(figura); }
void wypisz(){
typename std::list<T>::iterator it;
for(it=this->listaFigur.begin();it!=this->listaFigur.end();++it){
std::cout << std::endl;
(*it)->wypiszKrawedzie();
}
}
private:
std::list<T> listaFigur;
};
int main(){
Trojkat *trk = new Trojkat(
Odcinek(Punkt(0,0), Punkt(0,2)),
Odcinek(Punkt(0,2), Punkt(2,0)),
Odcinek(Punkt(2,0), Punkt(0,0)),
"Trojkat");
Kwadrat *kwd = new Kwadrat(
Odcinek(Punkt(0,0), Punkt(0,2)),
Odcinek(Punkt(0,2), Punkt(2,2)),
Odcinek(Punkt(2,2), Punkt(2,0)),
Odcinek(Punkt(2,0), Punkt(0,0)),
"Kwadrat");
Lista<Figura*> lst;
lst.dodaj(trk);
lst.dodaj(kwd);
lst.wypisz();
delete trk;
delete kwd;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPHN0cmluZz4KCmNsYXNzIFB1bmt0ewpwdWJsaWM6CiAgICBQdW5rdChmbG9hdCB4LCBmbG9hdCB5KSA6IHgoeCksIHkoeSkgeyB9CiAgICBmbG9hdCB6d3JvY1goKXsgcmV0dXJuIHRoaXMtPng7IH0KICAgIGZsb2F0IHp3cm9jWSgpeyByZXR1cm4gdGhpcy0+eTsgfQpwcml2YXRlOgogICAgZmxvYXQgeDsKICAgIGZsb2F0IHk7Cn07CgpjbGFzcyBPZGNpbmVrewpwdWJsaWM6CiAgICBPZGNpbmVrKGNvbnN0IFB1bmt0JiBwMSwgY29uc3QgUHVua3QmIHAyKSA6IHAxKHAxKSwgcDIocDIpIHt9CiAgICBQdW5rdCB6d3JvY1AxKCl7IHJldHVybiB0aGlzLT5wMTsgfQogICAgUHVua3Qgendyb2NQMigpeyByZXR1cm4gdGhpcy0+cDI7IH0KcHJpdmF0ZToKICAgIFB1bmt0IHAxOwogICAgUHVua3QgcDI7Cn07CgpjbGFzcyBGaWd1cmF7CnB1YmxpYzoKICAgIHZvaWQgd3lwaXN6S3Jhd2VkemllKCl7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJXc3BvbHJ6ZWRuZSBrcmF3ZWR6aSBmaWd1cnk6ICIgPDwgdGhpcy0+bmF6d2EgPDwgIlxuIjsKICAgICAgICBmb3IodW5zaWduZWQgaT0wO2k8dGhpcy0+b2RjaW5raS5zaXplKCk7aSsrKQogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgIktbIiA8PCBpICsgMSA8PCAiXSA9ICgiIDw8IHRoaXMtPm9kY2lua2lbaV0uendyb2NQMSgpLnp3cm9jWCgpIDw8CiAgICAgICAgICAgICIsICIgPDwgdGhpcy0+b2RjaW5raVtpXS56d3JvY1AxKCkuendyb2NZKCkgPDwgIiksICgiIDw8IHRoaXMtPm9kY2lua2lbaV0uendyb2NQMigpLnp3cm9jWCgpIDw8CiAgICAgICAgICAgICIsICIgPDwgdGhpcy0+b2RjaW5raVtpXS56d3JvY1AyKCkuendyb2NZKCkgPDwgIilcbiI7CiAgICB9Cgpwcm90ZWN0ZWQ6CiAgICBzdGQ6OnZlY3RvcjxPZGNpbmVrPiBvZGNpbmtpOwogICAgc3RkOjpzdHJpbmcgbmF6d2E7Cn07CgpjbGFzcyBUcm9qa2F0IDogcHVibGljIEZpZ3VyYXsKcHVibGljOgogICAgVHJvamthdChjb25zdCBPZGNpbmVrJiBhLCBjb25zdCBPZGNpbmVrJiBiLCBjb25zdCBPZGNpbmVrJiBjLCBzdGQ6OnN0cmluZyBuYXp3YSl7CiAgICAgICAgdGhpcy0+b2RjaW5raS5wdXNoX2JhY2soYSk7CiAgICAgICAgdGhpcy0+b2RjaW5raS5wdXNoX2JhY2soYik7CiAgICAgICAgdGhpcy0+b2RjaW5raS5wdXNoX2JhY2soYyk7CiAgICAgICAgdGhpcy0+bmF6d2EgPSBuYXp3YTsKICAgIH0KfTsKCmNsYXNzIEt3YWRyYXQgOiBwdWJsaWMgRmlndXJhewpwdWJsaWM6CiAgICBLd2FkcmF0KGNvbnN0IE9kY2luZWsmIGEsIGNvbnN0IE9kY2luZWsmIGIsIGNvbnN0IE9kY2luZWsmIGMsIGNvbnN0IE9kY2luZWsmIGQsIHN0ZDo6c3RyaW5nIG5hendhKXsKICAgICAgICB0aGlzLT5vZGNpbmtpLnB1c2hfYmFjayhhKTsKICAgICAgICB0aGlzLT5vZGNpbmtpLnB1c2hfYmFjayhiKTsKICAgICAgICB0aGlzLT5vZGNpbmtpLnB1c2hfYmFjayhjKTsKICAgICAgICB0aGlzLT5vZGNpbmtpLnB1c2hfYmFjayhkKTsKICAgICAgICB0aGlzLT5uYXp3YSA9IG5hendhOwogICAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgTGlzdGF7CnB1YmxpYzoKICAgIHZvaWQgZG9kYWooY29uc3QgVCAmZmlndXJhKXsgdGhpcy0+bGlzdGFGaWd1ci5wdXNoX2JhY2soZmlndXJhKTsgfQogICAgdm9pZCB3eXBpc3ooKXsKICAgICAgICB0eXBlbmFtZSBzdGQ6Omxpc3Q8VD46Oml0ZXJhdG9yIGl0OwogICAgICAgIGZvcihpdD10aGlzLT5saXN0YUZpZ3VyLmJlZ2luKCk7aXQhPXRoaXMtPmxpc3RhRmlndXIuZW5kKCk7KytpdCl7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICgqaXQpLT53eXBpc3pLcmF3ZWR6aWUoKTsKICAgICAgICB9CiAgICB9Cgpwcml2YXRlOgogICAgc3RkOjpsaXN0PFQ+IGxpc3RhRmlndXI7Cn07CgppbnQgbWFpbigpewoKICAgIFRyb2prYXQgKnRyayA9IG5ldyBUcm9qa2F0KAogICAgICAgICAgICAgICAgT2RjaW5layhQdW5rdCgwLDApLCBQdW5rdCgwLDIpKSwKICAgICAgICAgICAgICAgIE9kY2luZWsoUHVua3QoMCwyKSwgUHVua3QoMiwwKSksCiAgICAgICAgICAgICAgICBPZGNpbmVrKFB1bmt0KDIsMCksIFB1bmt0KDAsMCkpLAogICAgICAgICAgICAgICAgIlRyb2prYXQiKTsKCiAgICBLd2FkcmF0ICprd2QgPSBuZXcgS3dhZHJhdCgKICAgICAgICAgICAgICAgIE9kY2luZWsoUHVua3QoMCwwKSwgUHVua3QoMCwyKSksCiAgICAgICAgICAgICAgICBPZGNpbmVrKFB1bmt0KDAsMiksIFB1bmt0KDIsMikpLAogICAgICAgICAgICAgICAgT2RjaW5layhQdW5rdCgyLDIpLCBQdW5rdCgyLDApKSwKICAgICAgICAgICAgICAgIE9kY2luZWsoUHVua3QoMiwwKSwgUHVua3QoMCwwKSksCiAgICAgICAgICAgICAgICAiS3dhZHJhdCIpOwoKICAgIExpc3RhPEZpZ3VyYSo+IGxzdDsKICAgIGxzdC5kb2Rhaih0cmspOwogICAgbHN0LmRvZGFqKGt3ZCk7CiAgICBsc3Qud3lwaXN6KCk7CgogICAgZGVsZXRlIHRyazsKICAgIGRlbGV0ZSBrd2Q7CiAgICByZXR1cm4gMDsKfQo=
Wspolrzedne krawedzi figury: Trojkat
K[1] = (0, 0), (0, 2)
K[2] = (0, 2), (2, 0)
K[3] = (2, 0), (0, 0)
Wspolrzedne krawedzi figury: Kwadrat
K[1] = (0, 0), (0, 2)
K[2] = (0, 2), (2, 2)
K[3] = (2, 2), (2, 0)
K[4] = (2, 0), (0, 0)