Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- using namespace std;
- class Shape { //Потребно е да конструирате абстракна класа Shape
- protected: //со само еден параметар:
- int strana; //страна (int)
- public: //Конструктори:
- Shape () { //Shape() // defaulten konstruktor
- this->strana = 0;
- }
- Shape (int a) { //Shape(int a) // konstruktor so argumenti
- this-> strana = a;
- } //И виртуелните методи:
- virtual double plostina() = 0; // double plostina()
- virtual void pecati() = 0; //void pecati()
- virtual int getType() = 0; //int getType()
- Shape (const Shape &s) { // copy konstruktor
- this-> strana = s.strana;
- }
- ~Shape() {} // destruktor
- }; //Од таа класа вие треба да конструирате 3 изведени класи:
- class Square : public Shape { // Square
- public: //Изведените класи немаат дополнителни парамтери, туку ја наследуваат страната од Shape
- Square() {} // defaulten konstruktor
- Square(int strana) : Shape (strana) {} // konstruktor so argumenti ?? valjda
- Square(const Square &sq) : Shape(sq) {} // valjda copy konstruktor
- double plostina() { //Секоја од класите си има своја формула за plostina()
- return strana*strana; //соодветна за нивната геометриска фигура
- } //Формула за плоштина на квадрат а * a
- void pecati() {
- cout<<"Kvadrat so plostina = "<<plostina()<<endl;
- }
- int getType() { //getType() методот треба да враќа:
- return 1; // 1 за Square
- }
- };
- class Circle : public Shape { // Circle
- public: //Конструкторот на изведените класи ќе зема еден аругмент, страната на фигурата.
- Circle() {} // defaulten konstruktor
- Circle(int strana) : Shape (strana) {} // konstruktor so argumenti ?? valjda
- Circle(const Circle &c) : Shape(c) {} // valjda copy konstruktor
- double plostina() {
- return 3.14 * strana * strana; //Формула за плоштина на круг 3.14 * a * a
- }
- void pecati() {
- cout<<"Krug so plostina = "<<plostina()<<endl;
- }
- int getType() {
- return 2; // 2 за Circle
- }
- };
- class Triangle : public Shape { // Triangle
- public:
- Triangle() {} // defaulten konstruktor
- //При пишување на конструкторот на изведените класи да се искористи констукторот на родител класата
- Triangle(int strana) : Shape (strana) {} // konstruktor so argumenti ?? valjda
- Triangle(const Triangle &t) : Shape(t) {} // valjda copy konstruktor
- double plostina() { //Формула за плоштина на триаголник
- return (sqrt(3)/4) * strana * strana; // (sqrt(3)/4) * side * side
- }
- void pecati() { //За pecati() методот упатете се кон outputot за тест случајите.
- cout<<"Triagolnik so plostina = "<<plostina()<<endl;
- }
- int getType() {
- return 3; // 3 за Triangle
- }
- };
- void checkNumTypes (Shape ** niza, int n) { //Дефинирајте го методот void checkNumTypes(Shape** niza, int n)
- int krugce = 0;
- int kvadrat = 0;
- int triagolnik = 0;
- for(int i=0; i<n; i++) {
- // Square * s = dynamic_cast<Square *>(niza[i]);
- // if (s!=0) kvadrat++;
- // Circle * c = dynamic_cast<Circle *>(niza[i]);
- // if (c!=0) krugce++;
- // Triangle *t = dynamic_cast<Triangle *>(niza[i]);
- // if(t!=0) triagolnik++;
- if(niza[i]->getType()==1)
- kvadrat++;
- if(niza[i]->getType()==2)
- krugce++;
- if(niza[i]->getType()==3)
- triagolnik++;
- } // fakticki voa e nogu glupo od mene poso mozese so getType ama posle go vidiv ama
- //ce me izede guilt ako ne go napisam i toa taka da eve neka dreme u komentar drugoto
- cout<<"Broj na kvadrati vo nizata = "<<kvadrat<<endl;
- cout<<"Broj na krugovi vo nizata = "<<krugce<<endl;
- cout<<"Broj na triagolnici vo nizata = "<<triagolnik<<endl;
- } // така што ќе испечати во три реда колку квадрати, кругови и триаголници има во низата.
- int main() { //Покрај тоа треба да ја допишете Main класата така што ќе алоцирате динамичка низа
- int n; // од покажувачи кон класата Shape.
- cin >> n; //Прво се добива n - големината на динамичката низа.
- Shape **niza = new Shape * [n]; //TODO: inicijaliziraj niza od pokazuvachi kon klasata Shape
- //TODO: alociraj memorija so golemina n za prethodno navedenata niza
- int classType;
- int side;
- for(int i = 0; i < n; ++i) { //TODO: konstruiraj for ciklus so chija pomosh ke ja popolnish nizata
- cin >> classType; //Потоа n пати се добиваат пар цели броеви t i a,
- cin >> side; //каде што t е типот на објектот и а е страната на објектот.
- if(classType == 1) //Потоа кај секој покажувач од низата зависно од дадениот input
- niza[i] = new Square(side);// да алоцирате објект
- if(classType == 2)
- niza[i] = new Circle(side); //од една од трите изведени класи.
- if(classType == 3)
- niza[i] = new Triangle(side);
- }
- for(int i = 0; i < n; ++i) {
- niza[i]->pecati();
- }
- checkNumTypes(niza, n);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement