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

[Zadatak] Klasa RED

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Klasa RED

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dux_cro
Zgb

Član broj: 24884
Poruke: 63
*.adsl.net.t-com.hr.



Profil

icon [Zadatak] Klasa RED20.06.2006. u 16:26 - pre 216 meseci
Zadan je razred RED koji ima prazan konstruktor te postupke DodajURed i SkiniIzReda čiji su prototipovi :
int Red:odajURed(int element);
int Red::SkiniIzReda(int *element)
Napomena : Razred Red nema copy konstruktor
Potrebno je napisati fju čiji je prototip
int BrojClanova(Red *red)
koja će korištenjem postupaka iz reda prebrojati koliko red ima članova. Nakon završetka funkcije ulazni red mora ostati nepromjenjen


Code:

class Red{
private:
    struct at {
        int element;
        struct at *sljed;
    };
    typedef struct at atom;

    atom *ulaz;    
    atom *izlaz;


public:
    Red():ulaz(NULL),izlaz(NULL){}
    void Obrisi();
    ~Red(){
        Obrisi();
    }
    int DodajURed(int element);
    int SkiniIzReda(int *element);    
};


int Red::DodajURed(int element){
    atom *novi;
    if (novi = (atom*) malloc (sizeof (atom))) {
        novi->element = element;
        novi->sljed = NULL;
        if (izlaz == NULL) {
            izlaz = novi;        // ako je red bio prazan
        } else {
            ulaz->sljed = novi;    // inace, stavi na kraj
        }
        ulaz = novi;            // zapamti zadnjeg
        return 1;
    }
    return 0;
}

int Red::SkiniIzReda (int *element) {
    atom *stari;
    if (izlaz) {                        // ako red nije prazan 
        *element = izlaz->element;        // element koji se skida
        stari = izlaz;                    // zapamti trenutni izlaz
        izlaz = izlaz->sljed;            // novi izlaz
        free (stari);                    // oslobodi memoriju skinutog
        if (izlaz == NULL) ulaz = NULL; // prazan red
        return 1;
    }
    return 0;
}


void Red::Obrisi(){
    while(izlaz!=NULL){
        atom *temp = izlaz;
        izlaz = izlaz->sljed;        
        free(temp);
    }
    ulaz = NULL;
}




E sad.. ima li netko ideju kako to pobrojati?
tnx
Of all the things I have lost I miss my mind the most...
 
Odgovor na temu

Igor Gajic

Član broj: 93194
Poruke: 747
*.ADSL.neobee.net.



+987 Profil

icon Re: [Zadatak] Klasa RED20.06.2006. u 16:40 - pre 216 meseci


Otprilike:

Code:


int Red::Pobroji(){
   int broj=0;
   atom *temp = izlaz;
    while(temp!=NULL){
      
        temp = temp->sljed;        
        broj++;
    }
    return broj;
}
 
Odgovor na temu

dux_cro
Zgb

Član broj: 24884
Poruke: 63
*.adsl.net.t-com.hr.



Profil

icon Re: [Zadatak] Klasa RED20.06.2006. u 16:44 - pre 216 meseci
i ja sam mislio tako nešto, al me muči ona rečenica da će nova funkcija korištenjem funkcija iz klase vratiti broj elemenata... Jel moguće nekako napraviti da funkcija poziva funkciju skini, pa poborji koliko ju je puta uspješno pozvala, pa onda poziva funkciju StaviURed, jer piše da red na kraju mora biti ne promjenjen?

hvala
Of all the things I have lost I miss my mind the most...
 
Odgovor na temu

Igor Gajic

Član broj: 93194
Poruke: 747
*.ADSL.neobee.net.



+987 Profil

icon Re: [Zadatak] Klasa RED20.06.2006. u 16:49 - pre 216 meseci


Mozes da napravis jednu static promenljivu u tvojoj klasi,
koju ces povecavati za jedan kada dodajes element,
odnosno oduzimas jedan kada skidas element.
Efektivno dobijas brojac elemenata.


Hm,
malo vise sam razmislio o ovome.

Ako vec moras da koristis SAMO f-je koje su vec definisane onda je tvoj pristup dobar.

Definises novi privremeni red. Koristis pokazivac ulaz. Skines taj element dodas ga u privremeni
red i povecas brojac elemenata za jedan. I sve tako dok ne ispraznis pocetni red.

Sada imas kopiju prvobitnog reda i broj elemenata.

Istim postupkom vratis elemente u pocetni red, i na kraju dobijes prvobitni red+broj elemenata.

UH.

[Ovu poruku je menjao Igor Gajic dana 20.06.2006. u 18:12 GMT+1]
 
Odgovor na temu

Igor Gajic

Član broj: 93194
Poruke: 747
*.ADSL.neobee.net.



+987 Profil

icon Re: [Zadatak] Klasa RED20.06.2006. u 17:45 - pre 216 meseci


Code:

int BrojClanova(Red *red)
{
   Red temp;
   int brojac=0;
   int elem;
   while(red->SkiniIzReda(&elem))
   { temp.DodajURed(elem);
   brojac++;
   }

   while(temp.SkiniIzReda(&elem))
   { red->DodajURed(elem);
   }
   return brojac;
}
 
Odgovor na temu

dux_cro
Zgb

Član broj: 24884
Poruke: 63
*.adsl.net.t-com.hr.



Profil

icon Re: [Zadatak] Klasa RED20.06.2006. u 17:48 - pre 216 meseci
Mislim da je to ono što se traži....
Care jedno veliko hvala....

Of all the things I have lost I miss my mind the most...
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Klasa RED

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

Postavi temu Odgovori

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