Advertisement
Guest User

Untitled

a guest
Jun 20th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.31 KB | None | 0 0
  1. //TP 2018/2019: Zadaća 5, Zadatak 2
  2. #include <iostream>
  3. #include <vector>
  4. #include <iomanip>
  5. #include <algorithm>
  6. #include <iterator>
  7. #include <functional>
  8. class Berza{
  9. std::vector<int> cijene;
  10. int maxbr, minbr;
  11. public:
  12. Berza(int minbr, int maxbr){
  13. if(maxbr<0 || minbr<0) throw std::range_error("Ilegalne granicne cijene");
  14. Berza::maxbr=maxbr; Berza::minbr=minbr;
  15. }
  16. explicit Berza(int maxbr){
  17. if(maxbr<0) throw std::range_error("Ilegalne granicne cijene");
  18. Berza::maxbr=maxbr; Berza::minbr=0;
  19. }
  20. void RegistrirajCijenu(int cijena){
  21. if(cijena<minbr || cijena>maxbr) throw std::range_error("Ilegalna cijena");
  22. cijene.push_back(cijena);
  23. }
  24. int DajBrojRegistriranihCijena() const{ return cijene.size();}
  25. void BrisiSve(){ cijene.resize(0); }
  26. int DajMinimalnuCijenu() const{
  27. if(cijene.size()==0) throw std::range_error("Nema registriranih cijena");
  28. auto pom=std::min_element(cijene.begin(),cijene.end()); return *pom;
  29. }
  30. int DajMaksimalnuCijenu() const{
  31. if(cijene.size()==0) throw std::range_error("Nema registriranih cijena");
  32. auto pom=std::max_element(cijene.begin(),cijene.end()); return *pom;
  33. }
  34. bool operator !() const{ if(cijene.size()==0) return true; else return false; }
  35. int DajBrojCijenaVecihOd(int n) const{
  36. if(cijene.size()==0) throw std::range_error("Nema registriranih cijena");
  37. int brojac=std::count_if(cijene.begin(), cijene.end(),std::bind(std::greater<int>(), std::placeholders::_1, n));
  38. return brojac;
  39. }
  40. void Ispisi() const;
  41. int operator [](int indeks) const{
  42. if(indeks<1 || indeks>cijene.size()) throw std::range_error("Neispravan indeks");
  43. return cijene.at(indeks-1);
  44. }
  45. Berza &operator ++();
  46. Berza operator ++(int n);
  47. Berza &operator --();
  48. Berza operator --(int n);
  49. Berza operator -();
  50. friend Berza operator +(Berza &b, int y);
  51. friend Berza operator +(int y, Berza &b);
  52. friend Berza operator -(Berza &b, int y);
  53. friend Berza operator -(int y, Berza &b);
  54. friend Berza operator -(Berza &b1, Berza &b2);
  55. Berza &operator +=(int y);
  56. Berza &operator -=(int y);
  57. Berza &operator -=(Berza &b);
  58. friend bool operator ==(Berza &b1, Berza &b2);
  59. friend bool operator !=(Berza &b1, Berza &b2);
  60. };
  61. void Berza::Ispisi() const{
  62. std::vector<int> pom(cijene);
  63. std::sort(pom.begin(), pom.end(), std::greater<int>());
  64. std::vector<double> ispisujuci(cijene.size());
  65. std::transform(pom.begin(), pom.end(), ispisujuci.begin(), std::bind(std::divides<double>(),std::placeholders::_1, 100));
  66. /*for(int i=0;i<ispisujuci.size();i++){
  67. std::cout<<std::setprecision(2)<<std::fixed<<ispisujuci.at(i)<<std::endl;
  68. }*/
  69. std::copy(ispisujuci.begin(), ispisujuci.end(), std::ostream_iterator<double>(std::cout<<std::fixed<<std::setprecision(2), "\n"));
  70. }
  71. Berza &Berza::operator ++(){
  72. std::vector<int> pom(cijene);
  73. std::transform(pom.begin(), pom.end(), pom.begin(), std::bind(std::plus<int>(), std::placeholders::_1, 100));
  74. int brojac=std::count_if(pom.begin(), pom.end(), std::bind(std::greater<int>(), std::placeholders::_1, maxbr));
  75. if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
  76. cijene=pom;
  77. return *this;
  78. }
  79. Berza Berza::operator ++(int n){
  80. Berza pomocnaberza=*this;
  81. std::vector<int> pom(cijene);
  82. std::transform(pom.begin(),pom.end(), pom.begin(), std::bind(std::plus<int>(), std::placeholders::_1,100));
  83. int brojac=std::count_if(pom.begin(),pom.end(), std::bind(std::greater<int>(), std::placeholders::_1, maxbr));
  84. if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
  85. cijene=pom;
  86. return pomocnaberza;
  87. }
  88. Berza &Berza::operator --(){
  89. std::vector<int> pom(cijene);
  90. std::transform(pom.begin(), pom.end(), pom.begin(), std::bind(std::minus<int>(), std::placeholders::_1, 100));
  91. int brojac=std::count_if(pom.begin(), pom.end(), std::bind(std::less<int>(), std::placeholders::_1, minbr));
  92. if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
  93. cijene=pom;
  94. return *this;
  95. }
  96. Berza Berza::operator --(int n){
  97. Berza pomocnaberza=*this;
  98. std::vector<int> pom(cijene);
  99. std::transform(pom.begin(), pom.end(), pom.begin(), std::bind(std::minus<int>(), std::placeholders::_1, 100));
  100. int brojac=std::count_if(pom.begin(),pom.end(),std::bind(std::less<int>(), std::placeholders::_1, minbr));
  101. if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
  102. cijene=pom;
  103. return pomocnaberza;
  104. }
  105. Berza Berza::operator -(){
  106. int suma=maxbr+minbr;
  107. Berza pom(*this);
  108. std::transform(pom.cijene.begin(), pom.cijene.end(), pom.cijene.begin(), std::bind(std::minus<int>(), suma, std::placeholders::_1));
  109. return pom;
  110. }
  111. Berza operator+(Berza &b, int y){
  112. Berza pov=b;
  113. std::transform(pov.cijene.begin(), pov.cijene.end(), pov.cijene.begin(), std::bind(std::plus<int>(), std::placeholders::_1, y));
  114. int brojac=std::count_if(pov.cijene.begin(), pov.cijene.end(), std::bind(std::greater<int>(), std::placeholders::_1, b.maxbr));
  115. if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
  116. return pov;
  117. }
  118. Berza operator +(int y, Berza &b){
  119. Berza pov=b;
  120. std::transform(pov.cijene.begin(), pov.cijene.end(), pov.cijene.begin(), std::bind(std::plus<int>(), std::placeholders::_1, y));
  121. int brojac=std::count_if(pov.cijene.begin(), pov.cijene.end(), std::bind(std::greater<int>(), std::placeholders::_1, b.maxbr));
  122. if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
  123. return pov;
  124. }
  125. Berza operator -(Berza &b, int y){
  126. Berza pov=b;
  127. std::transform(pov.cijene.begin(), pov.cijene.end(), pov.cijene.begin(), std::bind(std::minus<int>(), std::placeholders::_1,y));
  128. int brojac=std::count_if(pov.cijene.begin(), pov.cijene.end(), std::bind(std::less<int>(), std::placeholders::_1, b.minbr));
  129. if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
  130. return pov;
  131. }
  132. Berza operator -(int y, Berza &b){
  133. Berza pov=b;
  134. std::transform(pov.cijene.begin(), pov.cijene.end(), pov.cijene.begin(), std::bind(std::minus<int>(),y, std::placeholders::_1));
  135. int brojac=std::count_if(pov.cijene.begin(), pov.cijene.end(), std::bind(std::less<int>(), std::placeholders::_1, b.minbr));
  136. if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
  137. return pov;
  138. }
  139. Berza operator -(Berza &b1, Berza &b2){
  140. if(b1.cijene.size()!=b2.cijene.size() || b1.minbr!=b2.minbr || b1.maxbr!=b2.maxbr) throw std::domain_error("Nesaglasni operandi");
  141. Berza pov=b1;
  142. std::transform(b1.cijene.begin(), b1.cijene.end(), b2.cijene.begin(), pov.cijene.begin(), std::minus<int>());
  143. int brojac=std::count_if(pov.cijene.begin(), pov.cijene.end(), std::bind(std::less<int>(), std::placeholders::_1, b1.minbr));
  144. if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
  145. return pov;
  146. }
  147. Berza &Berza::operator +=(int y){
  148. Berza pom=*this;
  149. std::transform(pom.cijene.begin(), pom.cijene.end(), pom.cijene.begin(), std::bind(std::plus<int>(), std::placeholders::_1, y));
  150. int brojac=std::count_if(pom.cijene.begin(), pom.cijene.end(), std::bind(std::greater<int>(), std::placeholders::_1, maxbr));
  151. if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
  152. *this=pom;
  153. return *this;
  154. }
  155. Berza &Berza::operator -=(int y){
  156. Berza pom=*this;
  157. std::transform(pom.cijene.begin(), pom.cijene.end(), pom.cijene.begin(), std::bind(std::minus<int>(), std::placeholders::_1, y));
  158. int brojac=std::count_if(pom.cijene.begin(), pom.cijene.end(), std::bind(std::less<int>(), std::placeholders::_1, minbr));
  159. if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
  160. *this=pom;
  161. return *this;
  162. }
  163. Berza &Berza::operator -=(Berza &b){
  164. if(cijene.size()!=b.cijene.size() || minbr!=b.minbr || maxbr!=b.maxbr) throw std::domain_error("Nesaglasni operandi");
  165. Berza pom=*this;
  166. std::transform(pom.cijene.begin(),pom.cijene.end(), b.cijene.begin(), pom.cijene.begin(),std::bind(std::minus<int>(), std::placeholders::_1, std::placeholders::_2));
  167. int brojac=std::count_if(pom.cijene.begin(), pom.cijene.end(), std::bind(std::less<int>(), std::placeholders::_1, minbr));
  168. if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
  169. *this=pom;
  170. return *this;
  171. }
  172. bool operator ==(Berza &b1, Berza &b2){
  173. if(b1.cijene.size()!=b2.cijene.size()) return false;
  174. return std::equal(b1.cijene.begin(), b1.cijene.end(), b2.cijene.begin(), std::equal_to<int>());
  175. }
  176. bool operator !=(Berza &b1, Berza &b2){
  177. if(b1.cijene.size()!=b2.cijene.size()) return true;
  178. return !(std::equal(b1.cijene.begin(), b1.cijene.end(), b2.cijene.begin(), std::equal_to<int>()));
  179. }
  180. int main ()
  181. {
  182. Berza b1 = Berza(1025,4000);
  183. b1.RegistrirajCijenu(3000);
  184. b1.RegistrirajCijenu(1500);
  185. b1.RegistrirajCijenu(2000);
  186. ++b1;
  187. b1++;
  188. --b1;
  189. --b1;
  190. b1--;
  191. b1.Ispisi();
  192. std::cout << "---------------------------------" << std::endl;
  193. bool a = !b1;
  194. Berza b2 = Berza(100, 200);
  195. bool a_2 = !b2;
  196. std::cout << "Ako nema registriranih cijena ispisati cu 1 u suprotnom 0: " << a << std::endl;
  197. std::cout << "Ako nema registriranih cijena ispisati cu 1 u suprotnom 0: " << a_2;
  198. //b1[1] = 2; portrebno je da ovo ne radi
  199. std::cout << "\nBroj cijena vecih od 100: " << b1.DajBrojCijenaVecihOd(100);
  200. std::cout << "\nBroj cijena vecih od 3000: " << b1.DajBrojCijenaVecihOd(3000);
  201. std::cout << "\nBroj cijena " << b1.DajBrojRegistriranihCijena();
  202. std::cout<< std::endl << "Indeksacija pomocu [] operatora: " << b1[1] << " " << b1[2] << " " << b1[3] << std::endl;
  203. std::cout << "---------------------------------" << std::endl;
  204. Berza b3 = -b1;
  205. b3.Ispisi();
  206. std::cout << "---------------------------------" << std::endl;
  207. std::cout<< "b + y: " << std::endl;
  208. Berza b4(5000);
  209. b4 = b1 + 200;
  210. b4.Ispisi();
  211. std::cout << "---------------------------------" << std::endl;
  212. std::cout<< "b - y: " << std::endl;
  213. Berza b5(5000);
  214. b5 = b4 - 200;
  215. b5.Ispisi();
  216. std::cout << "---------------------------------" << std::endl;
  217. Berza b6(5000);
  218. std::cout<< "y + b: " << std::endl;
  219. b6 = 200 + b1;
  220. b6.Ispisi();
  221. std::cout << "---------------------------------" << std::endl;
  222. Berza b7(5000);
  223. std::cout<< "y - b: " << std::endl;
  224. b7 = 4500 - b1;
  225. b7.Ispisi();
  226. std::cout << "---------------------------------" << std::endl;
  227. std::cout<< "berza1 - berza2: " << std::endl;
  228. Berza b9(1, 6000);
  229. Berza b10(1, 6000);
  230. b9.RegistrirajCijenu(2500);
  231. b9.RegistrirajCijenu(3500);
  232. b9.RegistrirajCijenu(4500);
  233. b10.RegistrirajCijenu(2000);
  234. b10.RegistrirajCijenu(3000);
  235. b10.RegistrirajCijenu(4000);
  236. Berza b8 = b9 - b10;
  237. b8.Ispisi();
  238. std::cout << "---------------------------------" << std::endl;
  239. std::cout<< "berza1 += berza2: " << std::endl;
  240. Berza b11(1, 6000);
  241. b11.RegistrirajCijenu(1000);
  242. b11.RegistrirajCijenu(1000);
  243. b11.RegistrirajCijenu(1000);
  244. std::cout<< "berza1 -= berza2: " << std::endl;
  245. b11 -= b8;
  246. b11.Ispisi();
  247.  
  248. return 0;
  249. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement