Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zasto puca ovaj program ? [C++, polimorfizam ...]

[es] :: C/C++ programiranje :: Zasto puca ovaj program ? [C++, polimorfizam ...]

[ Pregleda: 2694 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

anon315

Član broj: 315
Poruke: 1657
*.dialup.sezampro.yu.



+13 Profil

icon Zasto puca ovaj program ? [C++, polimorfizam ...]16.01.2005. u 14:13 - pre 234 meseci
U zip-u je cela postavka, kombinacija koja treba da se resi i izvorni kod.
Program pravi problem posle izlaska iz prve for petlje u main-u. Mislio sam da je problematicna += operatorska funkcija (Zbirka.h), ali ne vidim gde.

Mala napomena: ako prevodite u Visual C++ 6 bice sve OK jer je zastareo kompajler, a morali smo da radimo u tome na lab. vezbi na fax-u. Ukoliko prevodite normalnim kompajlerom (g++ recimo) samo dodajte int i=0 ... u drugoj for petlji ...
Prikačeni fajlovi
 
Odgovor na temu

Marko Stankovic

Član broj: 11
Poruke: 306
*.rvkds.net.



Profil

icon Re: Zasto puca ovaj program ? [C++, polimorfizam ...]16.01.2005. u 22:55 - pre 234 meseci
Koliko ja primecujem problem je u tome sto vracas lose vrednosti u metodi najmanja(), a takodje i kod preklapanja operatora[] u klasi zbirka, jer tebi je promenljiva niz ustvari niz pokazivaca na tip APredmet. Tako da ako zelis da vratis recimo predmet na koji pokazuje treci pokazivac u nizu (odnosno niz[2]) treba da stavis

Code:

return *(niz[2]); 


zagrade ovde ne trebaju jer je [] veceg prioriteta od * (valjda tako bese ili su istog prioriteta ali je grupisanje sa leva na desno, ko ce pa da pamti te silne prioritete :)

Znaci u metodi najmanja() treba da bude
Code:

return *niz[locator]

i kod operatora[]
Code:

return *niz[i];


Ovo sto si ti stavio izgleda otprilike ovako (*niz)[locator]=*(niz+0)[locator]=niz[0][locator] sto moras da priznas nema mnogo smisla jer je niz[nesto] pokazivac na samo jedan objekat tipa APredmet a ne na niz objekata i plus sto ce ovo uvek uzimati prvi pokazivac iz niza.

Mozda ima jos neka greska ali mi je ovo prvo upalo u oci a i plus moram da se vratim na kompleksnu analizu ;) tako da nemam mnogo vremena da detaljnije gledam kod.

pozdrav
I drink to make other people interesting.
 
Odgovor na temu

anon315

Član broj: 315
Poruke: 1657
*.dialup.sezampro.yu.



+13 Profil

icon Re: Zasto puca ovaj program ? [C++, polimorfizam ...]17.01.2005. u 12:20 - pre 234 meseci
Ha, i posle ispravljanja pogresnog dereferenciranja se javlja isti problem ..
 
Odgovor na temu

Marko Stankovic

Član broj: 11
Poruke: 306
*.rvkds.net.



Profil

icon Re: Zasto puca ovaj program ? [C++, polimorfizam ...]17.01.2005. u 13:00 - pre 234 meseci
Sada sam malo detaljnije pogledao program i pronasao sam jos neke greske. Ispravio sam sve sto sam video i sada program radi. Stavio sam komentare gde god sam ispravio nesto. Evo i kod:
Code:

#ifndef ZBIRKA_H
#define ZBIRKA_H

class GZbirkaPrep {};

class Zbirka {
    APredmet** niz;
    int duzina, pop;

    void kopiraj(const Zbirka& z) {
        if(this!=&z) {
            delete[] niz;
            duzina=z.duzina;
            pop=z.pop;
            niz= new APredmet* [duzina];
            for(int i=0; i<pop; i++) niz[i]=z.niz[i]->kopija(); //operator -> umesto (*niz). i ne kopiramo samo pokazivace vec
        }                                                      // koristimo metodu kopija() 
    }
    void brisi() { delete[] niz; }
public:
    Zbirka(int i=5) { duzina=i; niz=new APredmet* [i]; pop=0;}
    Zbirka(const Zbirka& z) { kopiraj(z);}
    ~Zbirka() { brisi();}
    Zbirka& operator= (const Zbirka& z) { kopiraj(z); return *this; }
    Zbirka& operator+= (const APredmet& ap) { 
        if(pop==duzina) throw GZbirkaPrep();
        niz[pop++]=ap.kopija();
        return *this;
    }
    APredmet& najmanja() const {
        double najm=niz[0]->m(); //lakse je sa operatorom ->
        int locator;
        for( int i=0; i<pop; i++) if (niz[i]->m()<najm) { najm=niz[i]->m(); locator=i; } //opet operator ->
        return *niz[locator]; //!!!!
    }
    double srvr() {
        double sr=0;
        for( int i=0; i<pop; i++) sr+=niz[i]->m(); //op->
        sr/=pop;
        return sr;
    }
    void uredi() {
        for(int i=0; i<pop-1; i++)
            for(int j=i+1; j<pop; j++) //ovde je verovatno bila greska u kucanju u uslovu je stajalo i<pop
                if (niz[i]->m() > niz[j]->m()) { //op -> i treba u uslovu da bude znak > ako zelimo po neopadajucem redosledu
                    APredmet* temp;
                    temp = niz[i];
                    niz[i]=niz[j];
                    niz[j]=temp;
                }
    }
    
    APredmet& operator[] (int i) {
        return *niz[i]; //!!!
    }
};

#endif //ZBIRKA_H

I drink to make other people interesting.
 
Odgovor na temu

anon315

Član broj: 315
Poruke: 1657
*.dialup.sezampro.yu.



+13 Profil

icon Re: Zasto puca ovaj program ? [C++, polimorfizam ...]17.01.2005. u 17:00 - pre 234 meseci
 
Odgovor na temu

anon315

Član broj: 315
Poruke: 1657
*.ppp-bg.sezampro.yu.



+13 Profil

icon Re: Zasto puca ovaj program ? [C++, polimorfizam ...]18.01.2005. u 22:34 - pre 234 meseci
Evo čisto da dostavim dobru verziju rešenja, jer je prethodna poprilično loša ( rad 2 dana zbog lab. vežbe )
Prikačeni fajlovi
 
Odgovor na temu

[es] :: C/C++ programiranje :: Zasto puca ovaj program ? [C++, polimorfizam ...]

[ Pregleda: 2694 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.