Advertisement
Guest User

dupa

a guest
Jan 20th, 2020
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.80 KB | None | 0 0
  1. #ifndef PUNKT_H
  2. #define PUNKT_H
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. class Punkt
  7. {
  8.     int x;
  9.     int y;
  10.     string kolor = " ";
  11. public:
  12.     Punkt(int x, int y) : x(x), y(y) {}
  13.     virtual ~Punkt() {}
  14.     int getX() {return x;}
  15.     int getY() {return y;}
  16.     void setKolor(string kolor) {this-> kolor = kolor;}
  17.     string getKolor() {return kolor;}
  18. };
  19.  
  20.  
  21. #endif // PUNKT_H
  22.  
  23. /*friend ostream& operator<<(ostream &os,Punkt &p)
  24.     {
  25.         os<<"("<<p.getX()<<','<<p.getY()<<") "<<p.getKolor()<<endl;
  26.         return os;
  27.     }*/
  28. =============================================
  29. #ifndef ZBIOR_H
  30. #define ZBIOR_H
  31. #include <vector>
  32. #include "punkt.h"
  33. #include <iostream>
  34. #include <cstring>
  35. using namespace std;
  36.  
  37. class zbior
  38. {
  39.  
  40. public:
  41.     vector<Punkt> punkty;
  42.     zbior() {}
  43.     virtual ~zbior() {this->punkty.clear();}
  44.     zbior(const zbior&); //kopiujacy
  45.     friend ostream& operator<<(ostream &os, zbior &z);
  46.     friend istream& operator>>(istream &is, zbior &z);
  47.     virtual void drukuj();
  48.     void usun();
  49.  
  50.     zbior& operator=(const zbior &z);//przypisania
  51.     zbior operator+(zbior &z);
  52.     zbior wiekszeNiz(int a, int b);
  53. };
  54.  
  55. class kolorowyZbior : public zbior
  56. {
  57. public:
  58.     kolorowyZbior() {}
  59.     ~kolorowyZbior() {}
  60.  
  61.     void drukuj();
  62.  
  63. };
  64.  
  65.  
  66. #endif // ZBIOR_H
  67. =======================================================
  68.  
  69. #include "Zbior.h"
  70.  
  71. zbior::zbior(const zbior& Z) //kopiujacy
  72. {this->punkty = Z.punkty;} //przypisywanie wektorow do zbiorow
  73.  
  74. void zbior::drukuj()
  75. {
  76.     //tworzymy iterator wektora, ktory jest wskaznikiem na dany element w naszm wektorze przechowujacym punkty
  77.     //na poczatku ustawiamy go na poczatek, i z kazdym obiegiem petli sprawdzamy czy nie osiagnie elementu oznaczonego jako koniec
  78.     //vector<Punkt>::iterator i; lub auto i; w for
  79.     for (auto i = this->punkty.begin(); i != this->punkty.end(); i++)
  80.     {
  81.         //jako, ze jest to wskaznik to uzywamny -> a nie .
  82.         cout << "(" << i->getX() << ", " << i->getY() << ") ";
  83.     }
  84.     cout << endl;
  85. }
  86.  
  87. istream& operator>>(istream &is, zbior &z)
  88. {
  89.     int x, y;
  90.     do
  91.     {
  92.         cout<<"Podaj x: ";
  93.         is >> x;
  94.         cout<<"Podaj y: ";
  95.         is >> y;
  96.  
  97.         if (x < 0) cout << "x nie moze byc mniejszy od 0" << endl;
  98.         if (y < 0) cout << "y nie moze byc mniejszy od 0" << endl;
  99.     } while (x < 0 || y < 0);
  100.  
  101.     //tworzymy punkt, ktory ma byc dodany do zbioru, ale najpierw musimy sprawdzic, czy nie ma
  102.     //juz takiego punktu w zbiorze, dlatego przeszukujemy caly zbior i porownujemy wartosci
  103.     //jezeli natrafimy na taki sam punkt to konczymy petle i zaznaczamy ze punkt nie jesy unikalny
  104.     //jezeli nie natrafimy na taki sam, to po prostu dodajemy punkt do zbioru
  105.     Punkt p(x, y);
  106.     bool czyJest = false;
  107.     for (auto i = z.punkty.begin(); i != z.punkty.end(); i++)
  108.     {
  109.         if (i->getX() == x && i->getY() == y)
  110.         {
  111.             czyJest = true;
  112.             cout<<"Juz jest taki punkt."<<endl;
  113.             break;
  114.         }
  115.     }
  116.     if (czyJest==false) z.punkty.push_back(p);
  117.  
  118.     return is;
  119. }
  120.  
  121. ostream& operator<<(ostream &os, zbior &Z)
  122. {
  123.     //sprwdzamy jaka jest najwyzsza wartosc punktu w osi X i Y
  124.     int najwyzszyX = 0;
  125.     int najwyzszyY = 0;
  126.     for (auto i = Z.punkty.begin(); i != Z.punkty.end(); i++)
  127.     {
  128.         if (i->getX() > najwyzszyX) najwyzszyX = i->getX();
  129.         if (i->getY() > najwyzszyY) najwyzszyY = i->getY();
  130.     }
  131.  
  132.     bool **tab; //tworzymy tablice bool'i aby moc latwo zaznaczyc gdzie rysowac dany punkt
  133.     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
  134.     for (int i = 0; i < najwyzszyX + 1; i++)
  135.     {
  136.         tab[i] = new bool[najwyzszyY + 1];
  137.  
  138.         for (int j = 0; j < najwyzszyY + 1; j++)
  139.             {tab[i][j] = false;} //USTAWIAMY WSZYSTKO NA FA£SZ
  140.     }
  141.  
  142.     //ZAZNACZAMY PUNKTY, zmieniamy na true tam gdzie punkty sa
  143.     for (auto i = Z.punkty.begin(); i != Z.punkty.end(); i++)
  144.         {tab[i->getX()][i->getY()] = true;}
  145.  
  146.     //WYPISYWANIE: punkt z osi X szukam w rzedach a Y w kolumach
  147.     for (int i = 0; i < najwyzszyY + 1; i++) //kolumny
  148.     {
  149.         for (int j = 0; j < najwyzszyX + 1; j++) //rzedy
  150.         {
  151.             if (tab[j][i]==true) os << '*';
  152.             else os << '.';
  153.         }
  154.         os << endl;
  155.     }
  156.  
  157.     //ZWALNIANIE PAMIECI, bo bedzie krzyczal
  158.     for (int i = 0; i < najwyzszyX + 1; i++)
  159.         {delete[] tab[i];}
  160.     delete[] tab;
  161.  
  162.     return os;
  163. }
  164.  
  165. void zbior::usun() //do zmiany!!!
  166. {
  167.     this->punkty.clear();
  168. }
  169.  
  170. zbior& zbior::operator=(const zbior& z) //op przypisania = if(this==&z) return *this + destruktor + kopiujacy + return *this
  171. {
  172.     if(this==&z) return *this;
  173.     this->punkty.clear();
  174.     this->punkty = z.punkty;
  175.     return *this;
  176. }
  177.  
  178. zbior zbior::operator+(zbior& Z)
  179. {
  180.     zbior wynik;
  181.  
  182.     //dopisujemy kolejne elementy wektora z tego obiektu, do zbioru wynikowego, mozna by w sumie uzyc operacji przypisania
  183.     for (auto i = this->punkty.begin(); i != this->punkty.end(); i++)
  184.     {
  185.         wynik.punkty.push_back(*i);
  186.     }
  187.     //dopisujemy kolejne elementy z dodawanego zbioru, ale pamietamy, zeby upewnac sie czy przypadkiem w dodawanym zbiorze
  188.     //nie ma juz punktu takiego samego jak w zbiorze do ktorego dodajemy
  189.     bool czyJest = false;
  190.     for (auto i = Z.punkty.begin(); i != Z.punkty.end(); i++)
  191.     {
  192.         for (auto j = wynik.punkty.begin(); j != wynik.punkty.end(); j++)
  193.         {
  194.             if (i->getX() == j->getX() && i->getY() == j->getY())
  195.             {
  196.                 czyJest = true;
  197.                 cout<<"Jest juz taki punkt"<<endl;
  198.                 break;
  199.             }
  200.         }
  201.  
  202.         if (czyJest==false) wynik.punkty.push_back(*i);
  203.  
  204.         czyJest = false;
  205.     }
  206.  
  207.     return wynik;
  208. }
  209.  
  210. zbior zbior::wiekszeNiz(int a, int b)
  211. {
  212.     zbior wynik;
  213.  
  214.     for (auto i = this->punkty.begin(); i != this->punkty.end(); i++)
  215.     {
  216.         if (i->getX() > a && i->getY() > b) wynik.punkty.push_back(*i);
  217.     }
  218.     return wynik;
  219. }
  220.  
  221. void kolorowyZbior::drukuj()
  222. {
  223.     string kolor;
  224.     for (auto i = this->punkty.begin(); i != this->punkty.end(); i++)
  225.     {
  226.         cout<<"Podaj kolor: ";
  227.         cin>>kolor;
  228.         i->setKolor(kolor);
  229.         cout << "(" << i->getX() << ", " << i->getY() << ") "<<i->getKolor()<<endl;
  230.     }
  231.     cout << endl;
  232. }
  233.  
  234. ==========================================================
  235. MAIN
  236. #include "Punkt.h"
  237. #include "Zbior.h"
  238.  
  239. int main()
  240. {
  241.    /* cout<<"Wypisywanie pojedynczego punktu: ";
  242.     Punkt P1(2,9);
  243.     cout<<P1<<endl;
  244.     cout<<P1.getX()<<endl;
  245.     cout<<P1.getY()<<endl;
  246.     */ ///WORKS
  247.  
  248.     zbior z1, z2;
  249.     cin >> z1;
  250.     cin >> z1;
  251.     cin >> z1;
  252.     cin >> z1;
  253.  
  254.     z1.drukuj();
  255.     cout<< z1 << endl;
  256.  
  257.     zbior z3 = z1;
  258.     z3.drukuj();
  259.     zbior z4(z1);
  260.     z4.drukuj();
  261.     z2 = z1;
  262.     z2.drukuj();
  263.  
  264.     z3.usun();
  265.     z2.usun();
  266.  
  267.    /* cin >> z3;
  268.     cin >> z3;
  269.     cin >> z3;
  270.     cin >> z3;
  271.     z2 = z1 + z3;
  272.     z2.drukuj();
  273.  
  274.  
  275.     z1=z1.wiekszeNiz(3,3);
  276.     z1.drukuj();*/
  277.  
  278.     vector<zbior> zbiory;
  279.     kolorowyZbior kz1;
  280.     cin>>kz1;
  281.     cin>>kz1;
  282.     kz1.drukuj();
  283.  
  284.  
  285.     z1.usun();
  286.     z1.drukuj();
  287.     cout<< z1 << endl;
  288.  
  289.  
  290.     return 0;
  291.  
  292. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement