Advertisement
196040

OOP zadaci za vezbanje 1 Picerija (so operator +=)

May 6th, 2020
306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.57 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. class Pica { //Да се дефинира класа Пица за која ќе се чуваат податоци за:
  5. private:
  6. char imenapica [15]; //име на пицата (низа од 15 знаци)
  7. int cenanapica; //цена (цел број)
  8. char * sostojki; //состојки (динамички алоцирана низа од знаци)
  9. int namaluvanje; //намалување на цената во проценти (цел број)
  10. public://За потребите на оваа класа да се креираат потребните конструктори и да се напише соодветен
  11.     Pica(const char * imenapica = "", int cenanapica = 0, const char * sostojki = "", int namaluvanje=0) { //konstruktor so argumenti
  12.     strcpy(this->imenapica, imenapica);
  13.         this->cenanapica=cenanapica;
  14.         this->sostojki=new char[strlen(sostojki)+1];
  15.         strcpy(this->sostojki, sostojki);
  16.         this->namaluvanje = namaluvanje;
  17.     }
  18.     Pica(const Pica &p) { // copy konstruktor
  19.      strcpy(this->imenapica, p.imenapica);
  20.         this->cenanapica=p.cenanapica;
  21.         this->sostojki=new char[strlen(p.sostojki)+1];
  22.         strcpy(this->sostojki, p.sostojki);
  23.                 this->namaluvanje = p.namaluvanje;
  24.     }
  25.     Pica &operator=(Pica &p) { //operator = overload
  26.         if(this!=&p) {
  27.          strcpy(this->imenapica, p.imenapica);
  28.         this->cenanapica=p.cenanapica;
  29.             delete [] sostojki;
  30.         this->sostojki=new char[strlen(p.sostojki)+1];
  31.         strcpy(this->sostojki, p.sostojki);
  32.          this->namaluvanje = p.namaluvanje;
  33.         }
  34.     return *this;
  35.     }
  36.     ~Pica(){ //деструктор. Дополнително за оваа класа да се дефинира функцијата:
  37.     delete [] sostojki;
  38.     }
  39.     void pecati () { //pecati() - функција во која ќе се печатат податоците за пицата во следниот формат:
  40.     cout<<imenapica<<" - "<<sostojki<<", "<<cenanapica; //име - состојки, цена.
  41.     }
  42.     bool istiSe(Pica p) { //istiSe(Pica p) - функција за споредба на две пици според состојките :
  43. return (strcmp(p.sostojki, this->sostojki)==0);
  44.     }
  45.     int getnamaluvanje(){
  46.         return namaluvanje;
  47.     }
  48.     int getcena(){
  49.         return cenanapica;
  50.     }
  51. };class Picerija {
  52.  
  53. private:
  54.     char imenapica[15];
  55.     Pica* nizaodpici;
  56.     int brojnapici;
  57.  
  58. public:
  59.     Picerija(const char *imenapica = ""){
  60.         strncpy(this->imenapica, imenapica, 14);
  61.         this->imenapica[14] = 0;
  62.         nizaodpici = NULL;
  63.         brojnapici = 0;
  64.     }
  65.     Picerija(const char *imenapica, Pica* nizaodpici, int brojnapici) {
  66.         strncpy(this->imenapica, imenapica, 14);
  67.         this->imenapica[14] = 0;
  68.         this->brojnapici = brojnapici;
  69.         this->nizaodpici = new Pica[brojnapici];
  70.         for (int i = 0; i < brojnapici; i++)
  71.             this->nizaodpici[i] = nizaodpici[i];
  72.     }
  73.  
  74.     Picerija(const Picerija &p) {
  75.         strcpy(imenapica, p.imenapica);
  76.         brojnapici = p.brojnapici;
  77.         nizaodpici = new Pica[brojnapici];
  78.         for (int i = 0; i < brojnapici; i++)
  79.             nizaodpici[i] = p.nizaodpici[i];
  80.     }
  81.     Picerija& operator= (const Picerija &p) {
  82.         if (this != &p) {
  83.             strcpy(imenapica, p.imenapica);
  84.             brojnapici = p.brojnapici;
  85.             delete[] nizaodpici;
  86.             nizaodpici = new Pica[brojnapici];
  87.             for (int i = 0; i < brojnapici; i++)
  88.                 nizaodpici[i] = p.nizaodpici[i];
  89.         }
  90.         return *this;
  91.     }
  92.     ~Picerija() {
  93.         delete[] nizaodpici;
  94.     }
  95.  
  96.     Picerija& operator+=(Pica &p){
  97.         bool imaIsta = false;
  98.         for (int i = 0; i < brojnapici; i++)
  99.             if (nizaodpici[i].istiSe(p))
  100.                 imaIsta = true;
  101.         if (!imaIsta)
  102.         {
  103.             Pica* tmp = new Pica[brojnapici + 1];
  104.             for (int i = 0; i < brojnapici; i++)
  105.                 tmp[i] = nizaodpici[i];
  106.             tmp[brojnapici++] = p;
  107.             delete[] nizaodpici;
  108.             nizaodpici = tmp;
  109.         }
  110.         return *this;
  111.     }
  112.     void piciNaPromocija() {
  113.         for (int i = 0; i < brojnapici; i++){
  114.             if (nizaodpici[i].getnamaluvanje() != 0){
  115.                 nizaodpici[i].pecati();
  116.                 cout << " " << nizaodpici[i].getcena() * (1 - nizaodpici[i].getnamaluvanje() / 100.0) << endl;
  117.             }
  118.         }
  119.  
  120.     }
  121.     const char* getIme(){
  122.         return imenapica;
  123.     }
  124.     void setIme(const char* imenapica){
  125.         strncpy(this->imenapica, imenapica, 14);
  126.         this->imenapica[14] = 0;
  127.     }
  128. };
  129. int main() {
  130.     int n;
  131.     char ime[15];
  132.     cin >> ime;
  133.     cin >> n;
  134.     Picerija p1(ime);
  135.     for (int i = 0; i < n; i++){
  136.         char imp[100];
  137.         cin.get();
  138.         cin.getline(imp, 100);
  139.         int cena;
  140.         cin >> cena;
  141.         char sostojki[100];
  142.         cin.get();
  143.         cin.getline(sostojki, 100);
  144.         int popust;
  145.         cin >> popust;
  146.         Pica p(imp, cena, sostojki, popust);
  147.         p1+=p;
  148.     }
  149.     Picerija p2 = p1;
  150.     cin >> ime;
  151.     p2.setIme(ime);
  152.     char imp[100];
  153.     cin.get();
  154.     cin.getline(imp, 100);
  155.     int cena;
  156.     cin >> cena;
  157.     char sostojki[100];
  158.     cin.get();
  159.     cin.getline(sostojki, 100);
  160.     int popust;
  161.     cin >> popust;
  162.     Pica p(imp, cena, sostojki, popust);
  163.     p2+=p;
  164.     cout << p1.getIme() << endl;
  165.     cout << "Pici na promocija:" << endl;
  166.     p1.piciNaPromocija();
  167.     cout << p2.getIme() << endl;
  168.     cout << "Pici na promocija:" << endl;
  169.     p2.piciNaPromocija();
  170.     return 0;
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement