Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //TP 2018/2019: Zadaća 5, Zadatak 2
- #include <iostream>
- #include <vector>
- #include <iomanip>
- #include <algorithm>
- #include <iterator>
- #include <functional>
- class Berza{
- std::vector<int> cijene;
- int maxbr, minbr;
- public:
- Berza(int minbr, int maxbr){
- if(maxbr<0 || minbr<0) throw std::range_error("Ilegalne granicne cijene");
- Berza::maxbr=maxbr; Berza::minbr=minbr;
- }
- explicit Berza(int maxbr){
- if(maxbr<0) throw std::range_error("Ilegalne granicne cijene");
- Berza::maxbr=maxbr; Berza::minbr=0;
- }
- void RegistrirajCijenu(int cijena){
- if(cijena<minbr || cijena>maxbr) throw std::range_error("Ilegalna cijena");
- cijene.push_back(cijena);
- }
- int DajBrojRegistriranihCijena() const{ return cijene.size();}
- void BrisiSve(){ cijene.resize(0); }
- int DajMinimalnuCijenu() const{
- if(cijene.size()==0) throw std::range_error("Nema registriranih cijena");
- auto pom=std::min_element(cijene.begin(),cijene.end()); return *pom;
- }
- int DajMaksimalnuCijenu() const{
- if(cijene.size()==0) throw std::range_error("Nema registriranih cijena");
- auto pom=std::max_element(cijene.begin(),cijene.end()); return *pom;
- }
- bool operator !() const{ if(cijene.size()==0) return true; else return false; }
- int DajBrojCijenaVecihOd(int n) const{
- if(cijene.size()==0) throw std::range_error("Nema registriranih cijena");
- int brojac=std::count_if(cijene.begin(), cijene.end(),std::bind(std::greater<int>(), std::placeholders::_1, n));
- return brojac;
- }
- void Ispisi() const;
- int operator [](int indeks) const{
- if(indeks<1 || indeks>cijene.size()) throw std::range_error("Neispravan indeks");
- return cijene.at(indeks-1);
- }
- Berza &operator ++();
- Berza operator ++(int n);
- Berza &operator --();
- Berza operator --(int n);
- Berza operator -();
- friend Berza operator +(Berza &b, int y);
- friend Berza operator +(int y, Berza &b);
- friend Berza operator -(Berza &b, int y);
- friend Berza operator -(int y, Berza &b);
- friend Berza operator -(Berza &b1, Berza &b2);
- Berza &operator +=(int y);
- Berza &operator -=(int y);
- Berza &operator -=(Berza &b);
- friend bool operator ==(Berza &b1, Berza &b2);
- friend bool operator !=(Berza &b1, Berza &b2);
- };
- void Berza::Ispisi() const{
- std::vector<int> pom(cijene);
- std::sort(pom.begin(), pom.end(), std::greater<int>());
- std::vector<double> ispisujuci(cijene.size());
- std::transform(pom.begin(), pom.end(), ispisujuci.begin(), std::bind(std::divides<double>(),std::placeholders::_1, 100));
- /*for(int i=0;i<ispisujuci.size();i++){
- std::cout<<std::setprecision(2)<<std::fixed<<ispisujuci.at(i)<<std::endl;
- }*/
- std::copy(ispisujuci.begin(), ispisujuci.end(), std::ostream_iterator<double>(std::cout<<std::fixed<<std::setprecision(2), "\n"));
- }
- Berza &Berza::operator ++(){
- std::vector<int> pom(cijene);
- std::transform(pom.begin(), pom.end(), pom.begin(), std::bind(std::plus<int>(), std::placeholders::_1, 100));
- int brojac=std::count_if(pom.begin(), pom.end(), std::bind(std::greater<int>(), std::placeholders::_1, maxbr));
- if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
- cijene=pom;
- return *this;
- }
- Berza Berza::operator ++(int n){
- Berza pomocnaberza=*this;
- std::vector<int> pom(cijene);
- std::transform(pom.begin(),pom.end(), pom.begin(), std::bind(std::plus<int>(), std::placeholders::_1,100));
- int brojac=std::count_if(pom.begin(),pom.end(), std::bind(std::greater<int>(), std::placeholders::_1, maxbr));
- if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
- cijene=pom;
- return pomocnaberza;
- }
- Berza &Berza::operator --(){
- std::vector<int> pom(cijene);
- std::transform(pom.begin(), pom.end(), pom.begin(), std::bind(std::minus<int>(), std::placeholders::_1, 100));
- int brojac=std::count_if(pom.begin(), pom.end(), std::bind(std::less<int>(), std::placeholders::_1, minbr));
- if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
- cijene=pom;
- return *this;
- }
- Berza Berza::operator --(int n){
- Berza pomocnaberza=*this;
- std::vector<int> pom(cijene);
- std::transform(pom.begin(), pom.end(), pom.begin(), std::bind(std::minus<int>(), std::placeholders::_1, 100));
- int brojac=std::count_if(pom.begin(),pom.end(),std::bind(std::less<int>(), std::placeholders::_1, minbr));
- if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
- cijene=pom;
- return pomocnaberza;
- }
- Berza Berza::operator -(){
- int suma=maxbr+minbr;
- Berza pom(*this);
- std::transform(pom.cijene.begin(), pom.cijene.end(), pom.cijene.begin(), std::bind(std::minus<int>(), suma, std::placeholders::_1));
- return pom;
- }
- Berza operator+(Berza &b, int y){
- Berza pov=b;
- std::transform(pov.cijene.begin(), pov.cijene.end(), pov.cijene.begin(), std::bind(std::plus<int>(), std::placeholders::_1, y));
- int brojac=std::count_if(pov.cijene.begin(), pov.cijene.end(), std::bind(std::greater<int>(), std::placeholders::_1, b.maxbr));
- if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
- return pov;
- }
- Berza operator +(int y, Berza &b){
- Berza pov=b;
- std::transform(pov.cijene.begin(), pov.cijene.end(), pov.cijene.begin(), std::bind(std::plus<int>(), std::placeholders::_1, y));
- int brojac=std::count_if(pov.cijene.begin(), pov.cijene.end(), std::bind(std::greater<int>(), std::placeholders::_1, b.maxbr));
- if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
- return pov;
- }
- Berza operator -(Berza &b, int y){
- Berza pov=b;
- std::transform(pov.cijene.begin(), pov.cijene.end(), pov.cijene.begin(), std::bind(std::minus<int>(), std::placeholders::_1,y));
- int brojac=std::count_if(pov.cijene.begin(), pov.cijene.end(), std::bind(std::less<int>(), std::placeholders::_1, b.minbr));
- if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
- return pov;
- }
- Berza operator -(int y, Berza &b){
- Berza pov=b;
- std::transform(pov.cijene.begin(), pov.cijene.end(), pov.cijene.begin(), std::bind(std::minus<int>(),y, std::placeholders::_1));
- int brojac=std::count_if(pov.cijene.begin(), pov.cijene.end(), std::bind(std::less<int>(), std::placeholders::_1, b.minbr));
- if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
- return pov;
- }
- Berza operator -(Berza &b1, Berza &b2){
- if(b1.cijene.size()!=b2.cijene.size() || b1.minbr!=b2.minbr || b1.maxbr!=b2.maxbr) throw std::domain_error("Nesaglasni operandi");
- Berza pov=b1;
- std::transform(b1.cijene.begin(), b1.cijene.end(), b2.cijene.begin(), pov.cijene.begin(), std::minus<int>());
- int brojac=std::count_if(pov.cijene.begin(), pov.cijene.end(), std::bind(std::less<int>(), std::placeholders::_1, b1.minbr));
- if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
- return pov;
- }
- Berza &Berza::operator +=(int y){
- Berza pom=*this;
- std::transform(pom.cijene.begin(), pom.cijene.end(), pom.cijene.begin(), std::bind(std::plus<int>(), std::placeholders::_1, y));
- int brojac=std::count_if(pom.cijene.begin(), pom.cijene.end(), std::bind(std::greater<int>(), std::placeholders::_1, maxbr));
- if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
- *this=pom;
- return *this;
- }
- Berza &Berza::operator -=(int y){
- Berza pom=*this;
- std::transform(pom.cijene.begin(), pom.cijene.end(), pom.cijene.begin(), std::bind(std::minus<int>(), std::placeholders::_1, y));
- int brojac=std::count_if(pom.cijene.begin(), pom.cijene.end(), std::bind(std::less<int>(), std::placeholders::_1, minbr));
- if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
- *this=pom;
- return *this;
- }
- Berza &Berza::operator -=(Berza &b){
- if(cijene.size()!=b.cijene.size() || minbr!=b.minbr || maxbr!=b.maxbr) throw std::domain_error("Nesaglasni operandi");
- Berza pom=*this;
- 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));
- int brojac=std::count_if(pom.cijene.begin(), pom.cijene.end(), std::bind(std::less<int>(), std::placeholders::_1, minbr));
- if(brojac>0) throw std::range_error("Prekoracen dozvoljeni opseg cijena");
- *this=pom;
- return *this;
- }
- bool operator ==(Berza &b1, Berza &b2){
- if(b1.cijene.size()!=b2.cijene.size()) return false;
- return std::equal(b1.cijene.begin(), b1.cijene.end(), b2.cijene.begin(), std::equal_to<int>());
- }
- bool operator !=(Berza &b1, Berza &b2){
- if(b1.cijene.size()!=b2.cijene.size()) return true;
- return !(std::equal(b1.cijene.begin(), b1.cijene.end(), b2.cijene.begin(), std::equal_to<int>()));
- }
- int main ()
- {
- Berza b1 = Berza(1025,4000);
- b1.RegistrirajCijenu(3000);
- b1.RegistrirajCijenu(1500);
- b1.RegistrirajCijenu(2000);
- ++b1;
- b1++;
- --b1;
- --b1;
- b1--;
- b1.Ispisi();
- std::cout << "---------------------------------" << std::endl;
- bool a = !b1;
- Berza b2 = Berza(100, 200);
- bool a_2 = !b2;
- std::cout << "Ako nema registriranih cijena ispisati cu 1 u suprotnom 0: " << a << std::endl;
- std::cout << "Ako nema registriranih cijena ispisati cu 1 u suprotnom 0: " << a_2;
- //b1[1] = 2; portrebno je da ovo ne radi
- std::cout << "\nBroj cijena vecih od 100: " << b1.DajBrojCijenaVecihOd(100);
- std::cout << "\nBroj cijena vecih od 3000: " << b1.DajBrojCijenaVecihOd(3000);
- std::cout << "\nBroj cijena " << b1.DajBrojRegistriranihCijena();
- std::cout<< std::endl << "Indeksacija pomocu [] operatora: " << b1[1] << " " << b1[2] << " " << b1[3] << std::endl;
- std::cout << "---------------------------------" << std::endl;
- Berza b3 = -b1;
- b3.Ispisi();
- std::cout << "---------------------------------" << std::endl;
- std::cout<< "b + y: " << std::endl;
- Berza b4(5000);
- b4 = b1 + 200;
- b4.Ispisi();
- std::cout << "---------------------------------" << std::endl;
- std::cout<< "b - y: " << std::endl;
- Berza b5(5000);
- b5 = b4 - 200;
- b5.Ispisi();
- std::cout << "---------------------------------" << std::endl;
- Berza b6(5000);
- std::cout<< "y + b: " << std::endl;
- b6 = 200 + b1;
- b6.Ispisi();
- std::cout << "---------------------------------" << std::endl;
- Berza b7(5000);
- std::cout<< "y - b: " << std::endl;
- b7 = 4500 - b1;
- b7.Ispisi();
- std::cout << "---------------------------------" << std::endl;
- std::cout<< "berza1 - berza2: " << std::endl;
- Berza b9(1, 6000);
- Berza b10(1, 6000);
- b9.RegistrirajCijenu(2500);
- b9.RegistrirajCijenu(3500);
- b9.RegistrirajCijenu(4500);
- b10.RegistrirajCijenu(2000);
- b10.RegistrirajCijenu(3000);
- b10.RegistrirajCijenu(4000);
- Berza b8 = b9 - b10;
- b8.Ispisi();
- std::cout << "---------------------------------" << std::endl;
- std::cout<< "berza1 += berza2: " << std::endl;
- Berza b11(1, 6000);
- b11.RegistrirajCijenu(1000);
- b11.RegistrirajCijenu(1000);
- b11.RegistrirajCijenu(1000);
- std::cout<< "berza1 -= berza2: " << std::endl;
- b11 -= b8;
- b11.Ispisi();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement