Advertisement
Guest User

Untitled

a guest
Dec 17th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.20 KB | None | 0 0
  1. #include<iostream>
  2. #include<string>
  3. #include<cassert>
  4.  
  5. using namespace std;
  6.  
  7. class Punkt
  8. {
  9. private:
  10.     string nazwa;
  11.     double X;
  12.     double Y;
  13. public:
  14.     Punkt(string n, double x, double y)
  15.     {
  16.         nazwa = n;
  17.         X = x;
  18.         Y = y;
  19.     }
  20.     string ret_nazwa();
  21.     double ret_x();
  22.     double ret_y();
  23.     double suma();
  24. };
  25.  
  26. string Punkt::ret_nazwa()
  27. {
  28.     return nazwa;
  29. }
  30.  
  31. double Punkt::ret_x()
  32. {
  33.     return X;
  34. }
  35.  
  36. double Punkt::ret_y()
  37. {
  38.     return Y;
  39. }
  40.  
  41. double Punkt::suma()
  42. {
  43.     return X + Y;
  44. }
  45.  
  46. bool operator < (Punkt &a, Punkt &b)
  47. {
  48.     if (a.suma() == b.suma())
  49.     {
  50.         if (a.ret_x() == b.ret_x())
  51.             return a.ret_nazwa() < b.ret_nazwa();
  52.         else
  53.             return a.ret_x() < b.ret_x();
  54.     }
  55.     else
  56.         return a.suma() < b.suma();
  57. }
  58.  
  59. ostream & operator << (ostream & strumien, Punkt jakis)
  60. {
  61.     return strumien << jakis.ret_nazwa() << " " << jakis.ret_x() << " " << jakis.ret_y() << " ";
  62. }
  63.  
  64. template <class T> class link;
  65. template <class T> class Iterator;
  66.  
  67. template <class T>
  68. class list {
  69. protected:
  70.     link <T> *First;
  71. public:
  72.     list() : First(nullptr) {}
  73.     list(const list &source);
  74.     virtual ~list() {};
  75.     virtual void add(T value);
  76.     virtual void delete_all();
  77.  
  78.     friend class Iterator <T>;
  79. };
  80.  
  81. template <class T>
  82. class link {
  83. private:
  84.     T Value;
  85.     link <T> *Next;
  86.     link(T val, link *ptr) : Value(val), Next(ptr) { }
  87. public:
  88.     link <T> *insert(T value);
  89.  
  90.     friend class list <T>;
  91.     friend class Iterator <T>;
  92. };
  93.  
  94. template <class T> class Iterator {
  95. public:
  96.     Iterator(list <T> &aList);
  97.     virtual bool init();
  98.     virtual T operator()();
  99.     virtual bool operator !();
  100.     virtual bool operator++();
  101.     virtual bool operator++(int);
  102.     virtual void operator=(T value);
  103.     void remove_current();
  104.     void add_before(T new_value);
  105. protected:
  106.     list <T> &my_list;        
  107.     link <T> *previous;
  108.     link <T> *current;
  109. };
  110.  
  111.  
  112. template <class T> link <T> * link <T> ::insert(T value)
  113. {
  114.     Next = new link <T>(value, Next);
  115.     return Next;
  116. }
  117.  
  118.  
  119. template <class T> void list <T> ::add(T value)
  120. {
  121.     Iterator <T> itr(*this);
  122.     for (itr.init(); !itr; ++itr)
  123.     {
  124.         T x = itr();
  125.         if (value < x)
  126.         {
  127.             itr.add_before(value);
  128.             return;
  129.         }
  130.     }
  131.     itr.add_before(value);
  132. }
  133.  
  134. template <class T> void list <T> ::delete_all() {
  135.     link <T> *next;
  136.     for (link <T> *p = First; p; p = next) {
  137.         next = p->Next;
  138.         delete p;
  139.     }
  140.     First = nullptr;
  141. }
  142.  
  143. template <class T> Iterator <T> ::
  144. Iterator(list <T> &aList) : my_list(aList) {
  145.     init();
  146. }
  147. template <class T> bool Iterator <T> ::init() {
  148.     previous = nullptr;
  149.     current = my_list.First;
  150.     return current != nullptr;
  151. }
  152. template <class T> T Iterator <T> :: operator()() {
  153.     assert(current != nullptr);
  154.     return current->Value;
  155. }
  156. template <class T> void Iterator <T> :: operator=(T val) {
  157.     assert(current != nullptr);
  158.     current->Value = val;
  159. }
  160.  
  161. template <class T> void Iterator <T> ::remove_current()
  162. {
  163.     assert(current != nullptr);
  164.     if (previous == nullptr)
  165.         my_list.First = current->Next;
  166.     else
  167.         previous->Next = current->Next;
  168.     delete current;
  169.     current = nullptr;
  170. }
  171.  
  172. template <class T> bool Iterator <T> :: operator++() {
  173.     if (current == nullptr)
  174.     {
  175.         if (previous == nullptr)
  176.             current = my_list.First;
  177.         else
  178.             current = previous->Next;
  179.     }
  180.     else {
  181.         previous = current;
  182.         current = current->Next;
  183.     }
  184.     return current != nullptr;
  185. }
  186.  
  187. template <class T> bool Iterator <T> :: operator++(int) {
  188.     return operator++();
  189. }
  190.  
  191. template <class T> bool Iterator <T> :: operator !() {
  192.     if (current == nullptr and previous != nullptr)
  193.         current = previous->Next;
  194.     return current != nullptr;
  195. }
  196.  
  197.  
  198. template <class T> void Iterator <T> ::add_before(T val)
  199. {
  200.     if (previous)previous = previous->insert(val);
  201.     else {
  202.         my_list.First = new link<T>(val, my_list.First);
  203.         previous = my_list.First;
  204.         current = previous->Next;    
  205.     }
  206. }
  207.  
  208.  
  209. int main()
  210. {
  211.     list<Punkt> myList;
  212.     Iterator<Punkt> myIterator(myList);
  213.     double a,b;
  214.     string n;
  215.     for (int i = 0; i < 6; i++)
  216.     {
  217.         cin >> n;
  218.         cin >> a;
  219.         cin >> b;
  220.         myList.add(Punkt(n, a, b));
  221.     }
  222.     double c;
  223.     cin >> c;
  224.     for (myIterator.init(); !myIterator; ++myIterator)
  225.     {
  226.         if (c == myIterator().suma())
  227.             myIterator.remove_current();
  228.     }
  229.     for (myIterator.init(); !myIterator; ++myIterator)
  230.     {
  231.         cout << myIterator();
  232.     }
  233.  
  234.     return 1;
  235. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement