Advertisement
Guest User

Untitled

a guest
May 27th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.50 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <functional>
  4. #include <numeric>
  5.  
  6. using namespace std;
  7.  
  8. class Pritisci {
  9. double *pritisak;
  10. double min_pritisak, max_pritisak;
  11. int max_br, br_upisanih;
  12. public:
  13.  
  14. Pritisci (int max, double min_pr, double max_pr);
  15. ~Pritisci () {delete [] pritisak;}
  16. Pritisci (const Pritisci &p);
  17. Pritisci &Pritisci::operator =(const Pritisci &p);
  18. int DajBrojUpisanih () {return br_upisanih;}
  19. void UpisiNovi (double novi);
  20. void Izbrisi () { fill_n (pritisak, br_upisanih, 0); br_upisanih=0;}
  21. double DajProsjecni ();
  22. double DajNajmanji ();
  23. double DajNajveci ();
  24. int VeciOd (double broj);
  25. int ManjiOd (double broj);
  26. void Ispisi();
  27. friend Pritisci operator + (const Pritisci &p, double y);
  28. friend Pritisci operator + (double x, const Pritisci &p) {return p+x;}
  29. friend Pritisci operator + (const Pritisci &p1, const Pritisci &p2);
  30. friend Pritisci operator - (const Pritisci &p, double y);
  31. friend Pritisci operator - (double y, const Pritisci &p) {return p-y;}
  32. friend Pritisci operator - (const Pritisci &p1, const Pritisci &p2);
  33. friend Pritisci operator -= (Pritisci &p, double x) {p= p-x; return p;}
  34. friend Pritisci operator -= (Pritisci &p1,const Pritisci &p2) {return p1= p1-p2;}
  35. friend Pritisci operator += (Pritisci &p, double x) {return p= p+x;}
  36. friend Pritisci operator += (Pritisci &p1,const Pritisci &p2) {return p1= p1+p2;}
  37. friend Pritisci &operator ++ (Pritisci &p) {return p=p+1;}
  38. friend Pritisci &operator ++ (Pritisci &p, int);
  39. friend Pritisci &operator -- (Pritisci &p) {return p=p-1;}
  40. friend Pritisci &operator -- (Pritisci &p, int);
  41. double operator [] (int) const;
  42. double &operator [] (int);
  43. friend bool operator == (const Pritisci &p1, const Pritisci &p2);
  44. friend bool operator != (const Pritisci &p1, const Pritisci &p2) {return !(p1==p2);}
  45.  
  46. };
  47.  
  48.  
  49. Pritisci::Pritisci (int max, double min_pr, double max_pr){
  50. pritisak= new double [max];
  51. max_br=max;
  52. for (int i=0; i<max; i++)
  53. pritisak[i]=0;
  54. max_pritisak=max_pr; min_pritisak=min_pr; br_upisanih=0;
  55. }
  56.  
  57.  
  58. Pritisci::Pritisci (const Pritisci &p) {
  59. min_pritisak =p.min_pritisak; max_pritisak=p.max_pritisak;
  60. max_br=p.max_br; br_upisanih=p.br_upisanih;
  61. pritisak =new double [p.max_br];
  62. copy(p.pritisak, p.pritisak + max_br, pritisak);
  63. }
  64.  
  65. Pritisci::Pritisci &Pritisci::operator =(const Pritisci &p) {
  66. if (max_br<p.max_br)
  67. {
  68. delete[] pritisak;
  69. pritisak =new double [p.max_br];
  70. }
  71. max_br= p.max_br; br_upisanih=p.br_upisanih;
  72. copy (p.pritisak, p.pritisak + max_br, pritisak);
  73. return *this;
  74. }
  75.  
  76.  
  77. void Pritisci::UpisiNovi (double novi) {
  78. if (novi < min_pritisak) throw "Nedozvoljeno mala vrijednost pritiska";
  79. if (novi > max_pritisak) throw "Nedozvoljeno velika vrijednost pritiska";
  80. if (br_upisanih==max_br) throw "Vec je upisan maksimalan broj pritisaka";
  81. pritisak [br_upisanih]=novi;
  82. }
  83.  
  84. double Pritisci::DajProsjecni () {
  85. if(br_upisanih==0) throw "nema unesneih pritisaka";
  86. return (accumulate (pritisak, &pritisak[br_upisanih], 0)/double(br_upisanih));
  87. }
  88.  
  89. double Pritisci::DajNajmanji (){
  90. if(br_upisanih==0) throw "nema unesneih pritisaka";
  91. return *min_element (pritisak, pritisak + br_upisanih);
  92. }
  93.  
  94. double Pritisci::DajNajveci () {
  95. if(br_upisanih==0) throw "nema unesneih pritisaka";
  96. return *max_element (pritisak, pritisak + br_upisanih);
  97. }
  98.  
  99. int Pritisci::VeciOd (double broj) {
  100. if ((br_upisanih)==0) throw "nema unesenih pritisaka";
  101. return count_if(pritisak, pritisak + max_br, bind2nd(greater <double>(),broj));
  102. }
  103.  
  104. int Pritisci::ManjiOd (double broj) {
  105. if(br_upisanih==0) throw "nema unesneih pritisaka";
  106. return count_if (pritisak, pritisak + max_br, bind2nd(less <double>(),broj));
  107. }
  108.  
  109. void Pritisci::Ispisi() {
  110. double *p(new double [br_upisanih]);
  111. partial_sort_copy (pritisak, pritisak + br_upisanih, p, p+br_upisanih);
  112. for (int i=br_upisanih-1; i>=0; i--)
  113. cout <<p[i] <<endl;
  114. delete [] p;
  115. }
  116.  
  117. Pritisci operator + (const Pritisci &p, double y) {
  118. Pritisci p1(p.max_br, p.min_pritisak +y, p.max_pritisak + y);
  119. transform (p.pritisak, p.pritisak + p.br_upisanih, p1.pritisak, bind2nd(plus<double>(), y));
  120. return p1;
  121. }
  122.  
  123. Pritisci operator - (const Pritisci &p, double y) {
  124. Pritisci p1(p.max_br, p.min_pritisak -y, p.max_pritisak - y);
  125. transform (p.pritisak, p.pritisak + p.br_upisanih, p1.pritisak, bind2nd(minus<double>(), y));
  126. return p1;
  127. }
  128.  
  129. Pritisci operator + (const Pritisci &p1, const Pritisci &p2) {
  130. if (p1.br_upisanih != p2.br_upisanih) throw "zadani pritisci se ne mogu sabrati";
  131. Pritisci p3(p1.max_br, p1.min_pritisak - p2.max_pritisak, p1.max_pritisak - p2.min_pritisak);
  132. transform (p1.pritisak, p1.pritisak + p1.br_upisanih, p2.pritisak, p3.pritisak, plus<double>());
  133. return p3;
  134. }
  135.  
  136. Pritisci operator - (const Pritisci &p1, const Pritisci &p2) {
  137. if (p1.br_upisanih != p2.br_upisanih) throw "zadani pritisci se ne mogu oduzeti";
  138. Pritisci p3(p1.max_br, p1.min_pritisak - p2.max_pritisak, p1.max_pritisak - p2.min_pritisak);
  139. transform (p1.pritisak, p1.pritisak + p1.br_upisanih, p2.pritisak, p3.pritisak, minus<double>());
  140. return p3;
  141. }
  142.  
  143. Pritisci &operator ++ (Pritisci &p, int){
  144. Pritisci p1(p);
  145. ++p;
  146. return p1;
  147. }
  148.  
  149. Pritisci &operator -- (Pritisci &p, int){
  150. Pritisci p1(p);
  151. --p;
  152. return p1;
  153. }
  154.  
  155. double Pritisci::operator [] (int n) const {
  156. if (n<1 || n>max_br) throw "Pogresan indeks!";
  157. return pritisak[n-1];
  158. }
  159.  
  160. double &Pritisci::operator [] (int n){
  161. if (n<1 || n>max_br) throw "Pogresan indeks!";
  162. return pritisak[n-1];
  163. }
  164.  
  165. bool operator == (const Pritisci &p1, const Pritisci &p2){
  166. return ((p1.br_upisanih == p2.br_upisanih)&& equal (p1.pritisak, p1.pritisak + p1.br_upisanih, p2.pritisak));
  167. }
  168.  
  169.  
  170.  
  171.  
  172.  
  173. int main()
  174. {
  175. Pritisci p(3, 1, 10); //pravim primjerak pomocu konstruktora
  176. Pritisci p1(p); //kopiram pritisak pomocu konstruktora kopije
  177.  
  178. p.Ispisi();
  179. p1.Ispisi();
  180.  
  181.  
  182. double a, b;
  183.  
  184. cout <<"koliko pritisaka zelite unijeti?" <<endl;
  185. cin>>a;
  186. cout <<"Unesite pritiske: " <<endl;
  187. for (int i=0; i<a; i++)
  188. {
  189. cin>> b; //isprobavanje metoda
  190. p.UpisiNovi(b); //
  191. }
  192. cout <<"Unijeli ste " <<p.DajBrojUpisanih() <<" vrijednosti pritiska." <<endl;
  193. cout <<"Od unesenih pritisaka najmanji je " <<p.DajNajmanji() <<", a najveci " <<p.DajNajveci() <<endl;
  194. cout <<"Prosjecna vrijednost pritiska iznosi " <<p.DajProsjecni() <<endl;
  195.  
  196. cout <<"Pritisci sortirani po opadajucem poretku: " <<endl;
  197. p.Ispisi();
  198.  
  199. cout <<endl <<"Unesite novu vrijednost prvog pritiska" <<endl;
  200. cin>>a;
  201. p.UpisiNovi(a);
  202. cout <<"Unesite novu vrijednost drugog pritiska" <<endl;
  203. cin>>a;
  204.  
  205. cout<<"Pritisci sad sadrze vrijednosti: " <<endl;
  206. p1.UpisiNovi(a);
  207. cout <<"p1= "; p.Ispisi();
  208. cout <<"i:" <<endl <<"p2= ";
  209. p1.Ispisi(); //provjera za operatore
  210.  
  211. cout <<"a nakon kopiranja izgleda ovako: " <<endl;
  212. p1=p;
  213. cout <<"p1= "; p.Ispisi();
  214. cout <<"p2= "; p1.Ispisi();
  215. Pritisci p2(4, 2, 10);
  216. p+=3;
  217. p2=p+p1;
  218. cout <<endl;
  219. p2.Ispisi();
  220. cout <<endl;
  221. p2-=p1;
  222. p2.Ispisi();
  223. cout <<endl;
  224. p2++;
  225. p2.Ispisi();
  226.  
  227.  
  228. cout << "Hello world!" << endl;
  229. return 0;
  230. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement