Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstring>
- using namespace std;
- class List { //Да се имплементира класа List во којашто ќе се чуваат информации за:
- private:
- int * niza; //броеви што се дел од листата (динамички алоцирана низа од цели броеви)
- int broj; //бројот на броеви што се дел од листата
- public: //За класата да се дефинираат следните методи:
- List() { //defaulten e 1
- this->niza=NULL;
- this->broj=0;
- }
- List(int * niza, int broj) { //конструктор (со аргументи) 2
- this->broj=broj;
- this->niza = new int[broj];
- for(int i=0;i<broj;i++)
- this->niza[i]=niza[i];
- }
- List (const List &l) { // copy-конструктор, 3
- this->broj=l.broj;
- this->niza = new int[l.broj];
- for(int i=0;i<l.broj;i++)
- this->niza[i]=l.niza[i];
- }
- List &operator=(const List &l) { //оператор = 4
- if(&l!=this) {
- delete [] niza;
- this->broj=l.broj;
- this->niza = new int[l.broj];
- for(int i=0;i<l.broj;i++)
- this->niza[i]=l.niza[i];
- }
- return *this;
- }
- int getbroj() {
- return broj;
- }
- ~List() { //деструктор, 5
- delete [] niza;
- }
- int sum() { // int sum() метод што ја враќа сумата на елементите во листата
- int suma=0;
- for(int i=0;i<this->broj;i++)
- suma=suma+niza[i];
- return suma;
- }
- double average() { // double average() метод што ќе го враќа просекот на броевите во листата
- return (double)sum() / this->broj;
- }
- void pecati() { //void pecati()метод што ќе ги печати информациите за листата во форматот:
- cout<<"List info: "<<broj<<":"; //[број на елементи во листата]: x1 x2 .. xn
- for(int i=0; i<broj; i++)
- cout<<" "<<niza[i];
- cout<<" sum: "<<sum()<<" "; //sum: [сума]
- cout<<"average: "<<average()<<endl; // average: [просек]
- }
- };
- class ListContainer { //Дополнително, креирајте класата ListContainer,
- private: //во која што ќе се чуваат информации за:
- List * niza; //низа од листи (динамички алоцирана низа од објекти од класата List)
- int elementi; //број на елементи во низата од листи (цел број)
- int neuspesni; //број на обиди за додавање на листа во контејнерот (цел број првично поставен на нула)
- public: //За класата потребно е да ги дефинирате следните методи:
- ListContainer() {// конструктор (default) 1
- this->niza=NULL;
- this->elementi=0;
- this->neuspesni=0;
- }
- ListContainer(List * niza, int elementi, int neuspesni) { // konstruktor so argumenti 2
- this->niza = new List[elementi];
- for(int i=0; i<elementi; i++)
- this->niza[i]=niza[i];
- this->elementi=elementi;
- this->neuspesni=neuspesni;
- }
- ListContainer(const ListContainer &lc) { // copy-конструктор, 3
- this->niza = new List[lc.elementi];
- for(int i=0; i<elementi; i++)
- this->niza[i]=lc.niza[i];
- this->elementi=lc.elementi;
- this->neuspesni=lc.neuspesni;
- }
- ListContainer &operator=(const ListContainer &lc) { // operator overload = 4
- if (this!=&lc) {
- delete [] niza;
- this->elementi=lc.elementi;
- this->neuspesni=lc.neuspesni;
- this->niza = new List[lc.elementi];
- for(int i=0; i<lc.elementi; i++)
- this->niza[i]=lc.niza[i];
- }
- return *this;
- }
- ~ListContainer() { //деструктор, 5
- delete [] niza;
- }
- int sum () { // int sum() метод што ја враќа сумата на сите елементи во сите листи
- int suma=0;
- for(int i=0; i<this->elementi; i++)
- suma=suma+niza[i].sum();
- return suma;
- }
- double average(){//double average() метод што го враќа просекот на сите елементи во сите листи во контејнерот
- int total=0;
- for(int i=0; i<this->elementi; i++)
- total=total+niza[i].getbroj();
- return (double)sum()/total;
- }
- void print() { //void pecati() метод што ќе ги печати информациите за контејнерот во форматот:
- if(this->elementi!=0) {
- for(int i=0; i<this->elementi; i++) {
- cout<<"List number: "<<i+1<<" "; //List number: [реден број на листата]
- this->niza[i].pecati(); //List info: [испечатени информации за листата со методот List::pecati()]
- }
- cout<<"Sum: "<<sum()<<" "; //\n sum: [сума]
- cout<<"Average: "<<average()<<endl; //average: [просек]
- cout<<"Successful attempts: "<<elementi<< " ";
- cout<<"Failed attempts: "<<neuspesni<<endl;
- }
- else {
- cout<<"The list is empty"<<endl;// доколку контејнерот е празен се печати само порака The list is empty.
- }
- }
- void addNewList (List l) { //void addNewList(List l) метод со којшто се додава листа во контејнерот
- int flag=0;
- for(int i=0; i<elementi; i++) //Напомена: една листа се додава во контејнерот ако и само ако
- {
- if(niza[i].sum() == l.sum()) //има различна сума од сите листи што се веќе додадени во контејнерот
- flag=1;
- }
- if(flag!=1) {
- List * tmp = new List [elementi + 1];
- for (int i = 0; i < elementi; i++ )
- tmp [i] = niza[i];
- tmp [elementi++] = l;
- delete [] niza;
- niza = tmp;
- // delete [] tmp; VOA NIKAKO NE GO PISI BAD THINGS HAPPEN
- }
- else neuspesni++;
- }
- };
- int main() {
- ListContainer lc;
- int N;
- cin>>N;
- for (int i=0;i<N;i++) {
- int n;
- int niza[100];
- cin>>n;
- for (int j=0;j<n;j++){
- cin>>niza[j];
- }
- List l=List(niza,n);
- lc.addNewList(l);
- }
- int testCase;
- cin>>testCase;
- if (testCase==1) {
- cout<<"Test case for operator ="<<endl;
- ListContainer lc1;
- lc1.print();
- cout<<lc1.sum()<<" "<<lc.sum()<<endl;
- lc1=lc;
- lc1.print();
- cout<<lc1.sum()<<" "<<lc.sum()<<endl;
- lc1.sum();
- lc1.average();
- }
- else {
- lc.print();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement