Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef PUNKT_H
- #define PUNKT_H
- #include <iostream>
- using namespace std;
- class Punkt
- {
- int x;
- int y;
- string kolor = " ";
- public:
- Punkt(int x, int y) : x(x), y(y) {}
- virtual ~Punkt() {}
- int getX() {return x;}
- int getY() {return y;}
- void setKolor(string kolor) {this-> kolor = kolor;}
- string getKolor() {return kolor;}
- };
- #endif // PUNKT_H
- /*friend ostream& operator<<(ostream &os,Punkt &p)
- {
- os<<"("<<p.getX()<<','<<p.getY()<<") "<<p.getKolor()<<endl;
- return os;
- }*/
- =============================================
- #ifndef ZBIOR_H
- #define ZBIOR_H
- #include <vector>
- #include "punkt.h"
- #include <iostream>
- #include <cstring>
- using namespace std;
- class zbior
- {
- public:
- vector<Punkt> punkty;
- zbior() {}
- virtual ~zbior() {this->punkty.clear();}
- zbior(const zbior&); //kopiujacy
- friend ostream& operator<<(ostream &os, zbior &z);
- friend istream& operator>>(istream &is, zbior &z);
- virtual void drukuj();
- void usun();
- zbior& operator=(const zbior &z);//przypisania
- zbior operator+(zbior &z);
- zbior wiekszeNiz(int a, int b);
- };
- class kolorowyZbior : public zbior
- {
- public:
- kolorowyZbior() {}
- ~kolorowyZbior() {}
- void drukuj();
- };
- #endif // ZBIOR_H
- =======================================================
- #include "Zbior.h"
- zbior::zbior(const zbior& Z) //kopiujacy
- {this->punkty = Z.punkty;} //przypisywanie wektorow do zbiorow
- void zbior::drukuj()
- {
- //tworzymy iterator wektora, ktory jest wskaznikiem na dany element w naszm wektorze przechowujacym punkty
- //na poczatku ustawiamy go na poczatek, i z kazdym obiegiem petli sprawdzamy czy nie osiagnie elementu oznaczonego jako koniec
- //vector<Punkt>::iterator i; lub auto i; w for
- for (auto i = this->punkty.begin(); i != this->punkty.end(); i++)
- {
- //jako, ze jest to wskaznik to uzywamny -> a nie .
- cout << "(" << i->getX() << ", " << i->getY() << ") ";
- }
- cout << endl;
- }
- istream& operator>>(istream &is, zbior &z)
- {
- int x, y;
- do
- {
- cout<<"Podaj x: ";
- is >> x;
- cout<<"Podaj y: ";
- is >> y;
- if (x < 0) cout << "x nie moze byc mniejszy od 0" << endl;
- if (y < 0) cout << "y nie moze byc mniejszy od 0" << endl;
- } while (x < 0 || y < 0);
- //tworzymy punkt, ktory ma byc dodany do zbioru, ale najpierw musimy sprawdzic, czy nie ma
- //juz takiego punktu w zbiorze, dlatego przeszukujemy caly zbior i porownujemy wartosci
- //jezeli natrafimy na taki sam punkt to konczymy petle i zaznaczamy ze punkt nie jesy unikalny
- //jezeli nie natrafimy na taki sam, to po prostu dodajemy punkt do zbioru
- Punkt p(x, y);
- bool czyJest = false;
- for (auto i = z.punkty.begin(); i != z.punkty.end(); i++)
- {
- if (i->getX() == x && i->getY() == y)
- {
- czyJest = true;
- cout<<"Juz jest taki punkt."<<endl;
- break;
- }
- }
- if (czyJest==false) z.punkty.push_back(p);
- return is;
- }
- ostream& operator<<(ostream &os, zbior &Z)
- {
- //sprwdzamy jaka jest najwyzsza wartosc punktu w osi X i Y
- int najwyzszyX = 0;
- int najwyzszyY = 0;
- for (auto i = Z.punkty.begin(); i != Z.punkty.end(); i++)
- {
- if (i->getX() > najwyzszyX) najwyzszyX = i->getX();
- if (i->getY() > najwyzszyY) najwyzszyY = i->getY();
- }
- bool **tab; //tworzymy tablice bool'i aby moc latwo zaznaczyc gdzie rysowac dany punkt
- tab = new bool*[najwyzszyX + 1]; //pamietajmy ze musimy dodawac 1 do rozmiaru tablicy, bo jezeli najwyzesze bedzie np. 6 to utworzy nam tablice 6 elementow od 0 do 5, a musi do 6
- for (int i = 0; i < najwyzszyX + 1; i++)
- {
- tab[i] = new bool[najwyzszyY + 1];
- for (int j = 0; j < najwyzszyY + 1; j++)
- {tab[i][j] = false;} //USTAWIAMY WSZYSTKO NA FA£SZ
- }
- //ZAZNACZAMY PUNKTY, zmieniamy na true tam gdzie punkty sa
- for (auto i = Z.punkty.begin(); i != Z.punkty.end(); i++)
- {tab[i->getX()][i->getY()] = true;}
- //WYPISYWANIE: punkt z osi X szukam w rzedach a Y w kolumach
- for (int i = 0; i < najwyzszyY + 1; i++) //kolumny
- {
- for (int j = 0; j < najwyzszyX + 1; j++) //rzedy
- {
- if (tab[j][i]==true) os << '*';
- else os << '.';
- }
- os << endl;
- }
- //ZWALNIANIE PAMIECI, bo bedzie krzyczal
- for (int i = 0; i < najwyzszyX + 1; i++)
- {delete[] tab[i];}
- delete[] tab;
- return os;
- }
- void zbior::usun() //do zmiany!!!
- {
- this->punkty.clear();
- }
- zbior& zbior::operator=(const zbior& z) //op przypisania = if(this==&z) return *this + destruktor + kopiujacy + return *this
- {
- if(this==&z) return *this;
- this->punkty.clear();
- this->punkty = z.punkty;
- return *this;
- }
- zbior zbior::operator+(zbior& Z)
- {
- zbior wynik;
- //dopisujemy kolejne elementy wektora z tego obiektu, do zbioru wynikowego, mozna by w sumie uzyc operacji przypisania
- for (auto i = this->punkty.begin(); i != this->punkty.end(); i++)
- {
- wynik.punkty.push_back(*i);
- }
- //dopisujemy kolejne elementy z dodawanego zbioru, ale pamietamy, zeby upewnac sie czy przypadkiem w dodawanym zbiorze
- //nie ma juz punktu takiego samego jak w zbiorze do ktorego dodajemy
- bool czyJest = false;
- for (auto i = Z.punkty.begin(); i != Z.punkty.end(); i++)
- {
- for (auto j = wynik.punkty.begin(); j != wynik.punkty.end(); j++)
- {
- if (i->getX() == j->getX() && i->getY() == j->getY())
- {
- czyJest = true;
- cout<<"Jest juz taki punkt"<<endl;
- break;
- }
- }
- if (czyJest==false) wynik.punkty.push_back(*i);
- czyJest = false;
- }
- return wynik;
- }
- zbior zbior::wiekszeNiz(int a, int b)
- {
- zbior wynik;
- for (auto i = this->punkty.begin(); i != this->punkty.end(); i++)
- {
- if (i->getX() > a && i->getY() > b) wynik.punkty.push_back(*i);
- }
- return wynik;
- }
- void kolorowyZbior::drukuj()
- {
- string kolor;
- for (auto i = this->punkty.begin(); i != this->punkty.end(); i++)
- {
- cout<<"Podaj kolor: ";
- cin>>kolor;
- i->setKolor(kolor);
- cout << "(" << i->getX() << ", " << i->getY() << ") "<<i->getKolor()<<endl;
- }
- cout << endl;
- }
- ==========================================================
- MAIN
- #include "Punkt.h"
- #include "Zbior.h"
- int main()
- {
- /* cout<<"Wypisywanie pojedynczego punktu: ";
- Punkt P1(2,9);
- cout<<P1<<endl;
- cout<<P1.getX()<<endl;
- cout<<P1.getY()<<endl;
- */ ///WORKS
- zbior z1, z2;
- cin >> z1;
- cin >> z1;
- cin >> z1;
- cin >> z1;
- z1.drukuj();
- cout<< z1 << endl;
- zbior z3 = z1;
- z3.drukuj();
- zbior z4(z1);
- z4.drukuj();
- z2 = z1;
- z2.drukuj();
- z3.usun();
- z2.usun();
- /* cin >> z3;
- cin >> z3;
- cin >> z3;
- cin >> z3;
- z2 = z1 + z3;
- z2.drukuj();
- z1=z1.wiekszeNiz(3,3);
- z1.drukuj();*/
- vector<zbior> zbiory;
- kolorowyZbior kz1;
- cin>>kz1;
- cin>>kz1;
- kz1.drukuj();
- z1.usun();
- z1.drukuj();
- cout<< z1 << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement