Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdexcept>
  3. #include <algorithm>
  4. using namespace std;
  5. class Apstraktna{
  6. protected:
  7. string ime_robe;
  8. double t_robe;
  9. double t_spremnika;
  10. public:
  11. virtual ~Apstraktna(){}
  12. Apstraktna(string ime,double tr,double ts):ime_robe(ime),t_robe(tr),t_spremnika(ts){}
  13. string DajIme()const{return ime_robe;}
  14. double DajTezinuRobe()const{return t_robe;}
  15. double DajTezinuSpremnika()const{return t_spremnika;}
  16. virtual void Ispisi()const=0;
  17. virtual Apstraktna* DajKopiju()const=0;
  18. };
  19.  
  20. class Sanduk:public Apstraktna{
  21. public:
  22. Sanduk(string ime,double tr,double ts):Apstraktna(ime,tr,ts){}
  23. void Ispisi()const{
  24. cout<<"U sanduku je "<<ime_robe<<", a tezina mu je "<<t_spremnika<<"kg, dok je tezina robe "<<t_robe<<"kg."<<endl;
  25. }
  26. Apstraktna *DajKopiju()const{
  27. return new Sanduk(*this);
  28. }
  29. };
  30.  
  31. class Bure:public Apstraktna{
  32. public:
  33. Bure(string ime,double tr,double ts):Apstraktna(ime,tr,ts){}
  34. void Ispisi()const{
  35. cout<<"U buretu je "<<ime_robe<<", a tezina mu je "<<t_spremnika<<"kg, dok je tezina robe "<<t_robe<<"kg."<<endl;
  36. }
  37. Apstraktna *DajKopiju()const override{
  38. return new Bure(*this);
  39. }
  40. };
  41.  
  42. class Skladiste{
  43. Apstraktna **skladiste;
  44. int c_max;
  45. public:
  46. Skladiste(){}
  47. explicit Skladiste(int c_max):c_max(c_max), skladiste(new Apstraktna*[c_max]{}){}
  48. ~Skladiste(){
  49. for(int i(0);i<c_max;i++){
  50. delete skladiste[i];
  51. }
  52. delete [] skladiste;
  53. }
  54. Skladiste(const Skladiste &s):c_max(s.c_max){
  55. skladiste=new Apstraktna*[c_max];
  56. for(int i(0);i<c_max;i++){
  57. skladiste[i]=s.skladiste[i]->DajKopiju();
  58. }
  59. }
  60. Skladiste(Skladiste &&s):c_max(s.c_max){
  61. skladiste=s.skladiste;
  62. s.skladiste=nullptr;
  63. }
  64. Skladiste &operator=(const Skladiste &s){
  65. if(c_max!=s.c_max) throw domain_error("Nesaglsni kapaciteti.");
  66. if(this!=&s){
  67. for(int i(0);i<c_max;i++){
  68. delete skladiste[i];
  69. }
  70. for(int i(0);i<c_max;i++){
  71. skladiste[i]=s.skladiste[i]->DajKopiju();
  72. }
  73. }
  74. return *this;
  75. }
  76. Skladiste &operator=(Skladiste &&s){
  77. if(c_max!=s.c_max) throw domain_error("Nesaglsni kapaciteti.");
  78. if(this!=&s){
  79. for(int i(0);i<c_max;i++){
  80. delete skladiste[i];
  81. }
  82. skladiste=s.skladiste;
  83. s.skladiste=nullptr;
  84. }
  85. return *this;
  86. }
  87. int DajBrojObjekata()const{
  88. int br(0);
  89. for(int i(0);i<c_max;i++){
  90. if(skladiste[i]!=nullptr)
  91. br++;
  92. }
  93. return br;
  94. }
  95. void DodajSanduk(string ime,double tr,double ts){
  96. Sanduk s(ime,tr,ts);
  97. if(DajBrojObjekata()==c_max) throw domain_error("Skladiste popunjeno");
  98. skladiste[DajBrojObjekata()]=s.DajKopiju();
  99. }
  100. void DodajBure(string ime,double tr,double ts){
  101. Bure b(ime,tr,ts);
  102. if(DajBrojObjekata()==c_max) throw domain_error("Skladiste popunjeno");
  103. skladiste[DajBrojObjekata()]=b.DajKopiju();
  104. }
  105. Apstraktna &NajlaksiObjekat()const{
  106. Apstraktna *najlaksi=skladiste[0];
  107. for(int i(0);i<DajBrojObjekata();i++){
  108. if(skladiste[i]->DajTezinuSpremnika()<najlaksi->DajTezinuSpremnika())
  109. najlaksi=skladiste[i];
  110. }
  111. return *najlaksi;
  112. }
  113. Apstraktna &NajteziObjekat()const{
  114. Apstraktna *najtezi=skladiste[0];
  115. for(int i(0);i<DajBrojObjekata();i++){
  116. if(skladiste[i]->DajTezinuSpremnika()>najtezi->DajTezinuSpremnika())
  117. najtezi=skladiste[i];
  118. }
  119. return *najtezi;
  120. }
  121. int DajTezeObjekte(int n){
  122. int br(0);
  123. for(int i(0);i<DajBrojObjekata();i++){
  124. if((skladiste[i]->DajTezinuRobe()+skladiste[i]->DajTezinuRobe())>n)
  125. br++;
  126. }
  127. return br;
  128. }
  129. void Ispisi()const{
  130. Skladiste ps(*this);
  131. sort(ps.skladiste,ps.skladiste+DajBrojObjekata(),[](Apstraktna *p1,Apstraktna *p2){
  132. return (p1->DajTezinuRobe()+p1->DajTezinuSpremnika())>(p2->DajTezinuRobe()+p2->DajTezinuSpremnika());
  133. });
  134. for(int i(0);i<DajBrojObjekata();i++){
  135. ps.skladiste[i]->Ispisi();
  136. }
  137. }
  138.  
  139. };
  140.  
  141. int main ()
  142. {
  143. Skladiste Magacin(3);
  144.  
  145. Magacin.DodajBure("voda",23,32);
  146. Magacin.DodajBure("ulje",20,50);
  147. Magacin.DodajSanduk("daska",20,10);
  148. Magacin.Ispisi();
  149. return 0;
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement