Advertisement
196040

OOP labs 4 i zadaci za vezbanje 1 ListContainer

May 11th, 2020
582
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.08 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. class List { //Да се имплементира класа List во којашто ќе се чуваат информации за:
  5. private:
  6. int * niza; //броеви што се дел од листата (динамички алоцирана низа од цели броеви)
  7. int broj; //бројот на броеви што се дел од листата
  8. public: //За класата да се дефинираат следните методи:
  9.     List() { //defaulten e 1
  10.     this->niza=NULL;
  11.         this->broj=0;
  12.     }
  13.     List(int * niza, int broj) {  //конструктор (со аргументи) 2
  14.      this->broj=broj;
  15.         this->niza = new int[broj];
  16.         for(int i=0;i<broj;i++)
  17.             this->niza[i]=niza[i];
  18.     }
  19.     List (const List &l) { // copy-конструктор, 3
  20.          this->broj=l.broj;
  21.                 this->niza = new int[l.broj];
  22.         for(int i=0;i<l.broj;i++)
  23.             this->niza[i]=l.niza[i];
  24.     }
  25.     List &operator=(const List &l) { //оператор = 4
  26.         if(&l!=this) {
  27.             delete [] niza;
  28.          this->broj=l.broj;
  29.                     this->niza = new int[l.broj];
  30.         for(int i=0;i<l.broj;i++)
  31.             this->niza[i]=l.niza[i];
  32.         }
  33.         return *this;
  34.     }
  35.     int getbroj() {
  36.     return broj;
  37.     }
  38.     ~List() { //деструктор,  5
  39.         delete [] niza;
  40.    }
  41.     int sum() { // int sum() метод што ја враќа сумата на елементите во листата
  42.         int suma=0;
  43.        for(int i=0;i<this->broj;i++)
  44.            suma=suma+niza[i];
  45.          return suma;
  46.     }
  47.     double average() {  // double average() метод што ќе го враќа просекот на броевите во листата
  48.     return (double)sum() / this->broj;
  49.     }
  50.     void pecati() { //void pecati()метод што ќе ги печати информациите за листата во форматот:
  51.         cout<<"List info: "<<broj<<":"; //[број на елементи во листата]: x1 x2 .. xn
  52.                     for(int i=0; i<broj; i++)
  53.          cout<<" "<<niza[i];
  54. cout<<" sum: "<<sum()<<" "; //sum:  [сума]
  55.         cout<<"average: "<<average()<<endl;  // average: [просек]
  56.     }
  57. };
  58. class ListContainer { //Дополнително, креирајте класата ListContainer,
  59.     private: //во која што ќе се чуваат информации за:
  60.    List * niza; //низа од листи (динамички алоцирана низа од објекти од класата List)
  61.    int elementi; //број на елементи во низата од листи (цел број)
  62.    int neuspesni; //број на обиди за додавање на листа во контејнерот (цел број првично поставен на нула)
  63.     public: //За класата потребно е да ги дефинирате следните методи:
  64.     ListContainer() {// конструктор (default) 1
  65. this->niza=NULL;
  66.         this->elementi=0;
  67.         this->neuspesni=0;
  68.     }
  69.     ListContainer(List * niza, int elementi, int neuspesni) { // konstruktor so argumenti 2
  70.     this->niza = new List[elementi];
  71.         for(int i=0; i<elementi; i++)
  72.         this->niza[i]=niza[i];
  73.         this->elementi=elementi;
  74.         this->neuspesni=neuspesni;
  75.     }
  76.     ListContainer(const ListContainer &lc) { // copy-конструктор, 3
  77.    this->niza = new List[lc.elementi];
  78.         for(int i=0; i<elementi; i++)
  79.         this->niza[i]=lc.niza[i];
  80.         this->elementi=lc.elementi;
  81.                 this->neuspesni=lc.neuspesni;
  82.     }
  83. ListContainer &operator=(const ListContainer &lc) { // operator overload = 4
  84.         if (this!=&lc) {
  85.             delete [] niza;  
  86.     this->elementi=lc.elementi;
  87.     this->neuspesni=lc.neuspesni;
  88.         this->niza = new List[lc.elementi];
  89.         for(int i=0; i<lc.elementi; i++)
  90.         this->niza[i]=lc.niza[i];
  91.         }
  92.     return *this;
  93.  }
  94.    ~ListContainer() { //деструктор, 5
  95.    delete [] niza;
  96.     }
  97.     int sum () { // int sum() метод што ја враќа сумата на сите елементи во сите листи
  98.         int suma=0;
  99.      for(int i=0; i<this->elementi; i++)
  100. suma=suma+niza[i].sum();
  101. return suma;
  102.     }
  103.     double average(){//double average() метод што го враќа просекот на сите елементи во сите листи во контејнерот
  104.         int total=0;
  105.         for(int i=0; i<this->elementi; i++)
  106. total=total+niza[i].getbroj();
  107. return (double)sum()/total;
  108.     }
  109.     void print() { //void pecati() метод што ќе ги печати информациите за контејнерот во форматот:
  110.         if(this->elementi!=0) {
  111.             for(int i=0; i<this->elementi; i++) {
  112.         cout<<"List number: "<<i+1<<" "; //List number: [реден број на листата]
  113.            this->niza[i].pecati(); //List info: [испечатени информации за листата со методот List::pecati()]
  114.         }
  115.             cout<<"Sum: "<<sum()<<" "; //\n sum: [сума]
  116.             cout<<"Average: "<<average()<<endl; //average: [просек]
  117.             cout<<"Successful attempts: "<<elementi<< " ";
  118.             cout<<"Failed attempts: "<<neuspesni<<endl;
  119.     }
  120.         else {
  121.             cout<<"The list is empty"<<endl;// доколку контејнерот е празен се печати само порака The list is empty.
  122.         }
  123.     }
  124.      void addNewList (List l) { //void addNewList(List l) метод со којшто се додава листа во контејнерот
  125.          int flag=0;
  126.        for(int i=0; i<elementi; i++) //Напомена: една листа се додава во контејнерот ако и само ако
  127.    {  
  128.            if(niza[i].sum() == l.sum()) //има различна сума од сите листи што се веќе додадени во контејнерот
  129.             flag=1;
  130. }
  131.             if(flag!=1) {
  132.              List * tmp = new List [elementi + 1];
  133.       for (int i = 0; i < elementi; i++ )
  134.                 tmp [i] = niza[i];
  135.         tmp [elementi++] = l;
  136.           delete [] niza;
  137.            niza = tmp;
  138.        // delete [] tmp; VOA NIKAKO NE GO PISI BAD THINGS HAPPEN
  139.           }
  140.          else neuspesni++;
  141.    }
  142. };
  143. int main() {
  144.     ListContainer lc;
  145.     int N; 
  146.     cin>>N;
  147.     for (int i=0;i<N;i++) {
  148.         int n;
  149.         int niza[100];
  150.             cin>>n;
  151.         for (int j=0;j<n;j++){
  152.             cin>>niza[j];
  153.         }
  154.         List l=List(niza,n);
  155.         lc.addNewList(l);
  156.     }  
  157.    int testCase;
  158.     cin>>testCase;
  159.     if (testCase==1) {
  160.         cout<<"Test case for operator ="<<endl;
  161.         ListContainer lc1;
  162.         lc1.print();
  163.         cout<<lc1.sum()<<" "<<lc.sum()<<endl;
  164.         lc1=lc;
  165.         lc1.print();
  166.         cout<<lc1.sum()<<" "<<lc.sum()<<endl;
  167.         lc1.sum();
  168.         lc1.average();
  169.     }
  170.     else {
  171.         lc.print();
  172.     }
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement