Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.35 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <cmath>
  4. using namespace std;
  5.  
  6. string zamien_na_male(string pom)
  7. {
  8.     string wynik;
  9.     for (int i = 0; i < pom.size(); i++)
  10.     {
  11.         wynik = wynik + char(tolower(int(pom[i])));
  12.     }
  13.     return wynik;
  14. }
  15.  
  16. class Punkt
  17. {
  18.  
  19. protected:
  20.     float m_x, m_y;
  21.     string m_nazwa;
  22.  
  23.  
  24. public:
  25.     Punkt();
  26.     Punkt(float, float, string);
  27.  
  28.     float odleglosc(float m_x, float m_y)
  29.     {
  30.         return sqrt((m_x * m_x) + (m_y * m_y));
  31.     }
  32.  
  33.     float kolodl(float a, float b) {
  34.         return sqrt(pow(m_x - a, 2) + pow(m_y - b, 2));
  35.     }
  36.     float jakix()
  37.     {
  38.         return m_x;
  39.     }
  40.     float jakiy()
  41.     {
  42.         return m_y;
  43.  
  44.     }
  45.     string jakanazwa()
  46.     {
  47.         return m_nazwa;
  48.     }
  49.  
  50.  
  51.     void wpisz()
  52.     {
  53.         cin >> m_nazwa >> m_x >> m_y;
  54.     }
  55. };
  56.  
  57. bool operator < (Punkt x, Punkt y)
  58. {
  59.     int dlugoscNazwyX = x.jakanazwa().size();
  60.     int dlugoscNazwaY = y.jakanazwa().size();
  61.     string zastap_1 = zamien_na_male(x.jakanazwa());
  62.     string zastap_2 = zamien_na_male(y.jakanazwa());
  63.  
  64.     if (x.odleglosc(x.jakix(), x.jakiy()) < y.odleglosc(y.jakix(), y.jakiy()))
  65.     {
  66.         return true;
  67.     }
  68.     else if (x.odleglosc(x.jakix(), x.jakiy()) == y.odleglosc(y.jakix(), y.jakiy()))
  69.     {
  70.         bool flaga = false;
  71.         if (dlugoscNazwyX >= dlugoscNazwaY) {
  72.             for (int i = 0; i < dlugoscNazwyX; i++) {
  73.                 if (zastap_1[i] < zastap_2[i]) {
  74.                     flaga = true;
  75.                     break;
  76.                 }
  77.                 else flaga = false;
  78.             }
  79.             return flaga;
  80.         }
  81.     }
  82.     else return false;
  83. }
  84.  
  85. ostream& operator << (ostream& s, Punkt& wyswietl) {
  86.     s << wyswietl.jakanazwa() << " " << wyswietl.jakix() << " " << wyswietl.jakiy() << " ";
  87.     return s;
  88. }
  89.  
  90. Punkt::Punkt()
  91. {
  92.     m_x = 0.0;
  93.     m_y = 0.0;
  94.     m_nazwa = " ";
  95. }
  96.  
  97. Punkt::Punkt(float mx, float my, string nazwa) :m_x(mx), m_y(my), m_nazwa(nazwa) {}
  98.  
  99.  
  100.  
  101. class Kolo : public Punkt
  102. {
  103. private:
  104.     float m_r;
  105.     string m_nazwakola;
  106. public:
  107.     Kolo()
  108.     {
  109.         m_r = 0.0;
  110.         m_nazwakola = " ";
  111.     }
  112.     Kolo(float x, float y, string pk, float r, string kn) : Punkt(x, y, pk), m_r(r), m_nazwakola(kn) {}
  113.  
  114.     float jakipromien()
  115.     {
  116.         return m_r;
  117.     }
  118. };
  119.  
  120. class Ukl_wspl {
  121.  
  122.     Punkt tab[20];
  123.     int licznik;
  124.  
  125. public:
  126.     //friend class Punkt;
  127.     Ukl_wspl();
  128.  
  129.     void dodajpunkt(Punkt v1)
  130.     {
  131.         if (licznik < 20)
  132.         {
  133.             tab[licznik] = v1;
  134.             licznik++;
  135.         }
  136.     }
  137.  
  138.     void sortowanie() {
  139.  
  140.         for (int i = 0; i < licznik; i++)
  141.         {
  142.             for (int j = 0; j < licznik - 1 - i; j++)
  143.             {
  144.                 if (tab[j] < tab[j + 1])
  145.                     swap(tab[j], tab[j + 1]);
  146.             }
  147.  
  148.         }
  149.  
  150.     }
  151.  
  152.     void disptab() //wyswietla od najmniejszego do najwiekszego
  153.     {
  154.         for (int j = 0; j < licznik; j++)
  155.         {
  156.             cout << tab[j];
  157.         }
  158.     }
  159.     bool sprawdzenie(Kolo k)
  160.     {
  161.         bool tymczasowe = true;
  162.  
  163.         for (int i = 0; i < licznik; i++)
  164.         {
  165.             if (tab[i].kolodl(k.jakix(), k.jakiy()) <= k.jakipromien())
  166.             {
  167.                 tymczasowe = true;
  168.             }
  169.             else
  170.             {
  171.                 tymczasowe = false;
  172.                 break;
  173.             }
  174.         }
  175.         return tymczasowe;
  176.     }
  177.  
  178. };
  179.  
  180. Ukl_wspl::Ukl_wspl() {
  181.     licznik = 0;
  182.  
  183.     for (int i = 0; i < 20; i++)
  184.     {
  185.         tab[i] = { Punkt() };
  186.     }
  187. }
  188.  
  189.  
  190.  
  191. int main()
  192. {
  193.     float x;
  194.     float y;
  195.     string pkName;
  196.     float r;
  197.     string kName;
  198.  
  199.     Ukl_wspl u;
  200.     Punkt p[6];
  201.  
  202.     for (int i = 0; i < 6; i++)
  203.     {
  204.         p[i].wpisz();
  205.     }
  206.     for (int i = 0; i < 6; i++)
  207.     {
  208.         u.dodajpunkt(p[i]);
  209.     }
  210.  
  211.     u.sortowanie();
  212.  
  213.     u.disptab();
  214.  
  215.     cin >> pkName;
  216.     cin >> x;
  217.     cin >> y;
  218.     cin >> kName;
  219.     cin >> r;
  220.  
  221.     Kolo k(x, y, pkName, r, kName);
  222.  
  223.     cout << u.sprawdzenie(k);
  224.  
  225.  
  226.     return 0;
  227. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement