1. Здраво и добредојдовте на форумот на IT.mk.

    Доколку сеуште не сте дел од најголемата заедница на ИТ професионалци и ентузијасти во Македонија, можете бесплатно да се - процесот нема да ви одземе повеќе од 2-3 минути, а за полесна регистрација овозможивме и регистрирање со Facebook и Steam.
    Сокриј

Листа од цели броеви

Дискусија во форумот 'C // C++' започната од coffemonstar, 29 Јуни 2018.

  1. coffemonstar

    coffemonstar
    Intern

    11
    8
    29 Јуни 2018
    Машко
    Ke saka nekoj da mi ja objasni pricinata zosto case 1 si raboti kako sto treba a vtoriot ne?
    Код:
    #include <iostream>
    #include<cstring>
    #include <memory>
    #include <string>
    #include <algorithm>
    using namespace std;
    class List {
        int n;
        int * broevi;
    public:
        List() {};
    
        List(int n,int * broevi) {
            n=n;
            for(int i = 0; i<n; i++) {
                broevi = broevi;
            }
    
        }
    
        List(const List &l1) {
            n = l1.n;
            for(int i = 0; i<l1.n; i++) {
                broevi = l1.broevi;
            }
        }
    
        double average(int a, int n);
        friend int sum (int * broevi, int n);
        friend istream&operator>>(istream &in, List & l);
        friend ostream&operator<<(ostream &os,const List & l);
    
        ~List() {};
    };
    
    istream &operator>>(istream  &in,List & l) {
        in >> l.n;
    
        for(int i = 0; i<l.n; i++) {
            in >> l.broevi;
        }
    
        return in;
    };
    
    double average(int a,int n) {
        a /= n;
        return a;
    }
    
    int sum (int * broevi,int n) {
        int sum = 0;
        for(int i = 0; i<n; i++) {
            sum+=broevi;
        }
        return sum;
    };
    
    ostream &operator<<(ostream &os,const List & l) {
        os <<  l.n << ": ";
    
        for(int i = 0; i<l.n; i++) {
            os << l.broevi << " ";
        }
    
        int a = sum(l.broevi,l.n);
        os << "sum: " << sum(l.broevi,l.n) << " average: " << average(a,l.n) << ""<<endl;
    
        return os;
    };
    
    int main() {
    
        int testCase;
        cin>>testCase;
    
        if (testCase==1) {
            cout<<"Testiranje na operatorite << i >>"<<endl;
            List l;
            cin >> l;
            cout<< l;
        } else if (testCase == 2) {
            cout<<"Testiranje na operatorot = za klasata List"<<endl;
            List l1;
            cin >> l1;
            cout << l1;
    
    
            List l2 = l1;
            cout << l2;
    
    
    
        } /* else if (testCase == 3) {
            //2 test primeri tuka
            cout << "Testiranje na operatorot +"<<endl;
            List l1,l2;
            cin >> l1;
            cin >> l2;
            List l3;
            l3 = l1+l2;
            cout << l3;
        } else if (testCase == 4) {
    
            cout << "Testiranje na operatorot - "<<endl;
            List l1,l2;
            cin >> l1;
            cin >> l2;
            List l3;
            l3 = l1-l2;
            cout << l3;
        } else if (testCase == 5) {
            cout << "Testiranje na operator ++ vo prefix notacija"<<endl;
            List l1;
            cin >> l1;
            cout << l1;
            cout << ++l1;
        } else if (testCase == 6) {
            cout << "Testiranje na operatorot -- vo sufix notacija"<<endl;
            List l1;
            cin >> l1;
            cout << "Pocetna vrednost: " << l1;
            List l2;
            l2 = l1--;
            cout << "Se povikuva ++ vo sufiks: " << l2;
            cout << "Posle povik: " << l1;
        } else if (testCase == 7) {
    
            cout << "Testiranje na operator += "<<endl;
            List l1;
            cin >> l1;
            int n;
            cin >> n;
            for (int i=0; i<n; i++) {
                int broj;
                cin >> broj;
                l1 += broj;
            }
            cout << l1;
        } else if (testCase == 8) {
            cout << "Testiranje na operatorot [ ] "<< endl;
            List l1;
            cin >> l1;
            int n;
            cin >> n;
            for (int i=0; i<n; i++) {
                int idx;
                cin >> idx;
                cout << "List["<< idx <<"] = " << l1[idx] << endl;
            }
        } else {
            //Dopolnitelno baranje
            cout <<"Testiranje na addList() metodot"<<endl;
            List l1,l2;
            cin >> l1;
            cin >> l2;
            cout << l1.addList(l2);
        }
     */
        return 0;
    }
    
     
    Изменето од модератор: 1 Јули 2018
    На Draynor му/ѝ се допаѓа ова.
  2. Legendata

    Legendata
    Intern

    7
    7
    11 Март 2017
    Машко
    Прочитај ги убаво барањата на code.finki.ukim.mk сите оператори и функции треба да ти се наоѓаат внатре во класата List. Ни првиот тест пример не ти го обработува, имаш низа од елементи и ќе треба во конструкторот да направиш измени на следниот начин.
    Пр.
    Код:
    List(int n, int *niza){
    this->n=n;
    int niza = new int[n+1];
    for(int i = 0; i < n; i++){
    this->niza=niza;
    }
    
    Фунцкиите sum() и average() не примаат аргументи! Во функцијата sum() ќе треба со for циклус да ги собираш елементите од низата. Исто така во функцијата average() само повикај ја функцијата за сума и подели ја со вкупниот број на елементи.

    А за вториот тест пример нигде немаш overload на операторот =.
     
    Изменето од модератор: 1 Јули 2018
    На Draynor и coffemonstar им се допаѓа ова.
  3. coffemonstar

    coffemonstar
    Intern

    11
    8
    29 Јуни 2018
    Машко
    Se uste go vadi istiot problem, 10 saati sum zaglaven na zadacava... :(

    Код:
    #include<iostream>
    #include<cstring>
    #include<cmath>
    
    using namespace std;
    
    class List {
    private:
        int n;
        int * niza;
    public:
        List() {};
        List(int * niza, int n) {
            this->n=n;
            niza = new int[n + 1];
            for(int i = 0; i<n; i++) {
                this->niza=niza;
            }
        }
    
        int sum() const {
            int sum = 0;
            for(int i = 0; i<n; i++) {
                sum+=niza;
            }
            return sum;
        }
    
        double average()const {
            double av = sum() / n;
            return av;
        }
    
        // l2 = l1;  l1;;
      
        List & operator = (const List &l){
      
        
             n = l.n;
          
            for(int i = 0;i<l.n;i++){
                niza = l.niza;
            }
          
          
            return * this;
        }
      
      
        ~List(){};
        friend istream&operator>>(istream &in, List & l);
        friend ostream&operator<<(ostream &os,const List & l);
    };
    
    /*
    List& List::eek:perator= (const List &l){
          n = l.n;
          
            for(int i = 0;i<l.n;i++){
                niza = l.niza;
            }
          
        return * this;
    } */
    
    istream&operator>>(istream &in, List & l) {
        cin >> l.n;
    
        for(int i = 0; i<l.n; i++) {
    
            cin >> l.niza;
    
        }
    
    
        return in;
    }
    
    ostream&operator<<(ostream &os,const List & l) {
        os << l.n << ": ";
    
        for(int i = 0; i<l.n; i++) {
    
            os << l.niza << " ";
    
        }
    
        os << "sum: " << l.sum() << " " << "average: " << l.average() << endl;
    
    
        return os;
    }
    
    int main() {
    
        int testCase;
        cin>>testCase;
    
        if (testCase==1) {
            cout<<"Testiranje na operatorite << i >>"<<endl;
            List l;
            cin >> l;
            cout<< l; // si funkcionira kako sto treba
        }
         else if (testCase == 2){
            cout<<"Testiranje na operatorot = za klasata List"<<endl;
            List l1;
            cin >> l1;
            cout<< l1; // tuka treba da saka da se izvrsi coutot. ne se pravi
            List l2;
            l2 = l1;
            cout << l2;
        }
        /* else if (testCase == 3){
            //2 test primeri tuka
            cout << "Testiranje na operatorot +"<<endl;
            List l1,l2;
            cin >> l1;
            cin >> l2;
            List l3;
            l3 = l1+l2;
            cout << l3;
        }
        else if (testCase == 4){
    
            cout << "Testiranje na operatorot - "<<endl;
            List l1,l2;
            cin >> l1;
            cin >> l2;
            List l3;
            l3 = l1-l2;
            cout << l3;
        }
        else if (testCase == 5){
            cout << "Testiranje na operator ++ vo prefix notacija"<<endl;
            List l1;
            cin >> l1;
            cout << l1;
            cout << ++l1;
        }
        else if (testCase == 6){
            cout << "Testiranje na operatorot -- vo sufix notacija"<<endl;
            List l1;
            cin >> l1;
            cout << "Pocetna vrednost: " << l1;
            List l2;
            l2 = l1--;
            cout << "Se povikuva ++ vo sufiks: " << l2;
            cout << "Posle povik: " << l1;
        }
        else if (testCase == 7) {
    
            cout << "Testiranje na operator += "<<endl;
            List l1;
            cin >> l1;
            int n;
            cin >> n;
            for (int i=0;i<n;i++){
                int broj;
                cin >> broj;
                l1 += broj;
            }
            cout << l1;
        }
        else if (testCase == 8){
            cout << "Testiranje na operatorot [ ] "<< endl;
            List l1;
            cin >> l1;
            int n;
            cin >> n;
            for (int i=0;i<n;i++){
                int idx;
                cin >> idx;
                cout << "List["<< idx <<"] = " << l1[idx] << endl;
            }
        }
        else {
            //Dopolnitelno baranje
            cout <<"Testiranje na addList() metodot"<<endl;
            List l1,l2;
            cin >> l1;
            cin >> l2;
            cout << l1.addList(l2);
        } */
    
        return 0;
    }
    
     
    Изменето од модератор: 1 Јули 2018
    На Draynor му/ѝ се допаѓа ова.
  4. Legendata

    Legendata
    Intern

    7
    7
    11 Март 2017
    Машко
    Во пример конструкторот што ти го пратив заборавив кај for циклусот да ти напоменам дека мора сите членови да ги пренесуваш така да, кога правиш конструктор за низи во глобала секој член треба да помине. Сегде кај што имаш for циклус за членовите низата треба да биде со niza[ i ]. Кај функцијата конструкторот и функцијата sum() треба да ги поминуваш членовите од низата таму треба да биде niza[ i ].

    Операторите >> и << стави ги внатре во функцијата затоа што ти се надвор а аргументите на класата ти се ставени во private, обично секогаш ги ставаме внатре во класата за да ни принта тоа што ни треба.

    Кај
    Код:
    istream << операторот декларирај нова низа.
    in>>l.n;
    int *novaNiza = new int[l.n];
    l.niza = novaNiza;
    for(int i=0;i<n;i++){ in>>l.niza[ i ]; }
    return in;
    
    Кај ostream >> операторот тргни го адресниот оператор & затоа што ќе ти принта адреси и пази да не заборавиш и таму да е со niza[ i ] бидејќи сакаш да ти ги принта членовите.

    Едит: Само што приметив дека кога ќе напишам [ i ] без празни места ми го прави тексот закосен. :annoyed:
     
    Изменето од модератор: 1 Јули 2018
    На Draynor и coffemonstar им се допаѓа ова.
  5. coffemonstar

    coffemonstar
    Intern

    11
    8
    29 Јуни 2018
    Машко
    Blagodaram <3
     
    На Draynor и Legendata им се допаѓа ова.
  6. D3N1EL

    D3N1EL
    Practice makes perfect

    2,864
    1,398
    10 Август 2010
    Машко
    Користете [CODE ][/CODE], тоа што го пролистав е екстра болно да се гледа.
     
    coffemonstar, Legendata, 100JKO и на уште 1 им се допаѓа ова.

Сподели

Вчитување...