Advertisement
rowers

zaliczenie_pk

Jan 22nd, 2015
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.28 KB | None | 0 0
  1. /*Tresc
  2. 1) Zadeklaruj klasę Zadanie, która reprezentuje zadania do wykonania (np. wpisy w terminarzu),
  3. które wewnątrz obiektów klasy reprezentowane są przez łańcuchy opisujące zadanie oraz przez datę
  4. planowanego wykonania zadania. Dodatkowo klasa posiada flagę oznaczjącą wykonanie zadania.
  5. Zadeklaruj wszystkie potrzebne do realizacji kolejnych klas Kolejka i KolejkaS metody i operatory.
  6.  
  7. 2) Zadeklaruj klasę Kolejka, która reprezentuje listę zadań. Zadania winny być przechowywane w liście jednokierunkowej
  8. (zadeklaruj również typ elementu listy). Zadeklaruj wszystkie potrzebne metody i operatory.
  9. Zdefiniuj następujące metody i operatory:
  10. konstruktor domyślny klasy
  11. konstruktor kopiujący klasy
  12. destruktor
  13. operator przypisania
  14. metodę czysc() która usuwa wszystkie zadania z listy
  15. metodę zaiwera(const Zadanie& z) zwracającą 1 gdy kolejka zawiera zadanie z
  16. zaprzyjaźniony operator strumieniowy wypisujący obiekty z listy
  17. operator += wstawiający zadanie do listy
  18.  
  19. 3) Zadeklaruj klasę KolejkaS, pochodną klasy Kolejka, która reprezentuje kolejki priorytetowe zadań.
  20. Wewnątrz kolejki zadania ułożone są w kolejności chronologicznej.
  21. Zdefiniuj następujące metody i operatory :
  22. operator += wstawiający zadanie do kolejki
  23. metodę zakoncz(const Kolejka& tobedone), która wykonuje te zadania z kolejki, które są (jednocześnie również)
  24. zawarte w kolejce tobedone
  25. operator przypisania dla klasy KolejkaS, umożliwiający przpisanie zadań z klasy Kolejka oraz KolejkaS
  26. zaprzyjaźniony operator strumieniowy wypisujący obiekty z klasy
  27. */
  28.  
  29.  
  30.  
  31. #include "stdafx.h"
  32. #include <ostream>
  33.  
  34. class Zadanie
  35. {
  36.   char* todo;
  37.   int data;
  38.   int wykonane;
  39.  
  40. public:
  41.     Zadanie();
  42.     Zadanie(char*, int);
  43.     Zadanie(const Zadanie&);
  44.     ~Zadanie();
  45.     Zadanie& operator=(const Zadanie&);
  46.  
  47.     void zakoncz(void);
  48.     int operator>(const Zadanie&);  // porownuje daty
  49.     int operator==(const Zadanie&); // porownuje CALE ZADANIA
  50.   friend std::ostream & operator<<(std::ostream&, const Zadanie&);
  51.  
  52. };
  53.  
  54. Zadanie::Zadanie()
  55. {
  56.   todo = NULL;
  57.   data = 0;
  58.   wykonane = 0;
  59. }
  60.  
  61. Zadanie::Zadanie(char* zad, int d)
  62. {
  63.   todo = new char[strlen(zad) + 1];
  64.   strcpy(todo, zad);
  65.   data = d;
  66.   wykonane = 0;
  67. }
  68.  
  69. Zadanie::Zadanie(const Zadanie& wzor)
  70. {
  71.   todo = new char[strlen(wzor.todo) + 1];
  72.   strcpy(todo, wzor.todo);
  73.   data = wzor.data;
  74.   wykonane = wzor.wykonane;
  75. }
  76.  
  77.  
  78. Zadanie::~Zadanie()
  79. {
  80.   if (todo)
  81.     delete todo;
  82. }
  83.  
  84. Zadanie& Zadanie::operator=(const Zadanie& wzor)
  85. {
  86.     if (this == &wzor)
  87.     return *this;
  88.  
  89.   if (todo)
  90.     delete todo;
  91.  
  92.   todo = new char[strlen(wzor.todo) + 1];
  93.   strcpy(todo, wzor.todo);
  94.   data = wzor.data;
  95.   wykonane = wzor.wykonane;
  96.  
  97.     return *this;
  98. }  
  99.  
  100. void Zadanie::zakoncz()
  101. {
  102.   std::cout<<"\nzadanie "<<todo<<" zaplanowane na "<<data<<" wykonane!";
  103.   wykonane = 1;
  104. }
  105.  
  106. int Zadanie::operator>(const Zadanie& z)
  107. {
  108.     return data > z.data;
  109. }
  110.  
  111. int Zadanie::operator==(const Zadanie& z)
  112. {
  113.     return ((strcmp(todo, z.todo) == 0) && (data == z.data));
  114. }
  115.  
  116. std::ostream& operator<<(std::ostream& os, const Zadanie& z)
  117. {
  118.     os<<z.todo;
  119.     os<<" ";
  120.     os<<z.data;
  121.     return os;
  122. };
  123.  
  124. //element listy jednokierunkowej
  125. struct elem
  126. {
  127.     Zadanie zad;
  128.     elem *nast;
  129.     elem(const Zadanie& z):zad(z), nast(NULL) {};
  130. };
  131.  
  132. class Kolejka
  133. {
  134. protected:
  135.     elem *glowa, /* NULL jezeli kolejka pusta */
  136.            *ogon; /* istotny gdy != NULL */
  137.  
  138. public:
  139.     Kolejka():glowa(NULL), ogon(NULL) {}
  140.  
  141.     virtual Kolejka& operator+=(const Zadanie& z) // virtual!!!
  142.     {
  143.         elem *nowy = new elem(z);
  144.         if (glowa)
  145.             ogon->nast = nowy;
  146.         else
  147.             glowa = nowy;
  148.  
  149.         ogon = nowy;
  150.         return *this;
  151.     }
  152.  
  153.     Kolejka(const Kolejka& kol)
  154.     {
  155.     glowa = NULL;
  156.         elem *biez = kol.glowa;
  157.  
  158.         while(biez)
  159.         {
  160.             (*this) += biez->zad;
  161.             biez = biez->nast;
  162.         }
  163.     }
  164.  
  165.     ~Kolejka()
  166.     {
  167.     czysc();  
  168.     }
  169.  
  170.     void czysc()    // zostawi pusty (glowa==NULL) obiekt
  171.     {
  172.     elem *biez;
  173.         while(glowa)
  174.         {
  175.       biez = glowa;
  176.             glowa = glowa->nast;
  177.             delete biez;
  178.         }
  179.     glowa = NULL;
  180.   }
  181.  
  182.     Kolejka& operator=(const Kolejka& kol)
  183.     {
  184.         if (&kol == this)
  185.             return *this;
  186.  
  187.         czysc();
  188.  
  189.         elem *biez = kol.glowa;
  190.         while(biez)
  191.         {
  192.             (*this) += biez->zad;
  193.             biez = biez->nast;
  194.         }
  195.         return *this;
  196.     }
  197.  
  198.     int zawiera(const Zadanie& z)
  199.     {
  200.         elem *biez = glowa;
  201.         while(biez)
  202.             if (biez->zad == z)
  203.                 return 1;
  204.             else
  205.                 biez = biez->nast;
  206.         return 0;
  207.     }
  208.  
  209.   friend std::ostream& operator<<(std::ostream& os, const Kolejka& kol)
  210.     {
  211.         elem *biez = kol.glowa;
  212.         while(biez)
  213.         {
  214.             os<<biez->zad<<" ";
  215.             biez = biez->nast;
  216.         }
  217.         return os;
  218.     }
  219.  
  220. };
  221.  
  222. class KolejkaS:public Kolejka
  223. {
  224. public:
  225.     KolejkaS& operator+=(const Zadanie &z) 
  226.     {
  227.         elem* nowy = new elem(z);
  228.  
  229.         if((!glowa) || (glowa->zad > z))    // wstaw na poczatek
  230.         {
  231.       nowy->nast = glowa;
  232.             glowa = nowy;
  233.         }
  234.         else
  235.         {
  236.             elem* biez = glowa;
  237.             while((biez->nast) && (!(biez->nast->zad > z)))
  238.                 biez = biez->nast;
  239.  
  240.             nowy->nast = biez->nast;
  241.             biez->nast = nowy;
  242.         }
  243.         if(!nowy->nast)
  244.             ogon = nowy;
  245.         return *this;
  246.     }
  247.  
  248.     void zakoncz(Kolejka& tobedone)
  249.     {
  250.         elem *biez = glowa;
  251.         while(biez)
  252.         {
  253.       if (tobedone.zawiera(biez->zad))
  254.         biez->zad.zakoncz();
  255.             biez = biez->nast;
  256.         }
  257.     }
  258.  
  259.     KolejkaS& operator=(const Kolejka& kol) // potrzebny bo zwraca KolejkaS
  260.     {
  261.         Kolejka::operator=(kol);    // += jest virtual !!!
  262.         return *this;
  263.     }
  264.  
  265. //  mamy konwersje automatyczne do klasy bazowej oraz wirtualne metody, zatem ponizsze juz mamy dzialajace
  266. //  friend ostream & operator<<(ostream &os, const sorted_q &rq)
  267.  
  268. };
  269.  
  270. int main()
  271. {
  272.   //test Zadanie
  273.   Zadanie z1("zadanie 1", 20071201);
  274.   Zadanie z2("zadanie 2", 20071121);
  275.   std::cout<<z1<<z2;
  276.  
  277.   Zadanie z3;
  278.   z3 = z1;
  279.   std::cout<<z3;
  280.   z3.zakoncz();
  281.  
  282.   //test Kolejka
  283.   Kolejka k1, k2;
  284.   k1 += z1;
  285.   k1 += Zadanie("zadanie 5", 20061111);
  286.   k1 += z2;
  287.   k2 += z3;
  288.   k2 += Zadanie("zadanie 4", 20071231);
  289.   std::cout<<std::endl<<k1;
  290.   std::cout<<std::endl<<k2;
  291.  
  292.   Kolejka k3(k1);
  293.   std::cout<<std::endl<<k3;
  294.  
  295.   k3 = k2;
  296.   std::cout<<std::endl<<k3;
  297.  
  298.   //test KolejkaS
  299.   KolejkaS ks1;
  300.   std::cout<<std::endl<<ks1;
  301.   ks1 = k1;
  302.   std::cout<<std::endl<<ks1;
  303.  
  304.   ks1 += Zadanie("zadanie 6", 20080101);
  305.   ks1 += Zadanie("zadanie 7", 20060101);
  306.   std::cout<<std::endl<<ks1;
  307.   ks1.zakoncz(k1);
  308.  
  309. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement