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

neophodna pomoc za jedan mali zadatak!

[es] :: C/C++ programiranje :: neophodna pomoc za jedan mali zadatak!

[ Pregleda: 2699 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vlada_dj
Vladimir Djokic
Beograd

Član broj: 39483
Poruke: 9
*.proxy.astra-net.com.



Profil

icon neophodna pomoc za jedan mali zadatak!29.11.2004. u 10:44 - pre 235 meseci
zadatak je sledeci:

Realizovati klasu ciji ce objekti sluziti za izdvajanje reci iz texta koji je dat kao niz znakova. Jednom recju smatra se niz znakova bez blanko znaka. Klasa treba da sadrzi pokazivac na niz znakova koji predstavlja ulazni text, i koji ce biti inicijalizOvan u konstruktoru. Klasa treba da sadrzi i funkciju koja, pri svakom pozivu, vraca pokazivac na dinamicki niz znakova u kojem je izdvojena naredna rec texta. Kada naidje na kraj texta. ova funkcija treba da vrati nula pokazivac. U glavnom programu isprobati upotrebu ove klase, na nekoliko objekata koji deluju na isti globalni niz znakova.

ja sam resenje zamislio ovako:
Code:

# include <iostream.h>
# include <string.h>


class Rec
{
public:
             Rec(char*);
             Rec();


    static char* text;//globalni text

    static char* iteratorTexta;//iterira znak po znak kroz text

    static char* prviZnakReci;//pokazuje naprvi znak u reci koja treba da bude izdvojena 


    static char* izdvojReci();//izdvaja reci iz texta

    static bool  krajTexta();//

           void  upisiZnak();//upiduje znak u rec


         char* rec;//sadrzi novu rec


};

char* Rec::text=NULL;
char* Rec::iteratorTexta=NULL;
char* Rec::prviZnakReci=NULL;

Rec::Rec(char* t)
{

    text=t;
    iteratorTexta=t;
    prviZnakReci=t;
}

Rec::Rec() 
{
    prviZnakReci=iteratorTexta+1;
    iteratorTexta++;
}


bool Rec::krajTexta()
{
    char znak=*iteratorTexta;
    if(znak=='\0')
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

char* Rec::izdvojReci()
{
    int brojac=0;

    char znak=*iteratorTexta;
    while(1)
    {
        if(znak==' ') break;
        brojac++;
        iteratorTexta++;
        znak=*iteratorTexta;
    }

    char* pom=new char[brojac+1];

    for(int i=0;i<brojac;i++)
    {
        pom[i]=*(prviZnakReci+i);
    }
    pom[i]='\0';

    return pom;
}

void Rec::upisiZnak()
{
    rec=izdvojReci();
}

void main(){                        

    Rec prva("da da da da da"),niz[100];
    niz[0]=prva;

    prva.upisiZnak();
    for(int i=1,p=1;Rec::krajTexta();i++,p++)
    {
        Rec* pom=new Rec();
        pom->upisiZnak();
        niz[i]=*pom;
    }

}


medjutim on ne radi ono sto ja ocekujem.
zamislio sam da za svaku rec texta pravim novu instancu klase.
mislim da je problem u brojacu koji uopste ne prekida brojanje znakova u reci izmedju dva blanko znaka. kao da ne prepoznaje da je naisao na blanko znak.

hvala unapred za trud svima koji pokusaju da mi pomognu!!!

[filmil: dodao code tag]
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl.

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: neophodna pomoc za jedan mali zadatak!29.11.2004. u 11:55 - pre 235 meseci
Ima puno problema u ovom kratkom programu.

Jedan od problema je i to što su ti većina stvari statičke (static) tako da sve klase dele istu instancu. Efekat je da kada god napraviš novu instancu klase Rec, ti pregaziš ono što je nekada pisalo u odgovarajućim promenljivim.

Da li si siguran da znaš kakav efekat ima ključna reč static?

Možda postoje i druge greške, ovo sam primetio na prvo gledanje.

f
 
Odgovor na temu

slonce
Milan Banovic
Zemun

Član broj: 1068
Poruke: 32
80.93.230.*



Profil

icon Re: neophodna pomoc za jedan mali zadatak!29.11.2004. u 12:18 - pre 235 meseci
Ja sam primetio na prvi pogled da kao kraj reci uzimas karakter '\0'. mislim da bi tu trebalo da ispitujes pojavljivanje ' ' (blank) i znakova interpunkcije.
 
Odgovor na temu

ivbrcic
Ivan Brcic
Siemens
Zagreb

Član broj: 38567
Poruke: 35
*.siemens.at.



Profil

icon Re: neophodna pomoc za jedan mali zadatak!29.11.2004. u 12:24 - pre 235 meseci
Koristenjem kljucne rijeci static u klasi ima efekt globalne varijable. Znaci vise instanci jedne klase mogu pristupati i mjenjati vrijednosti static varijabli. Kada pises static unutar klase tada se ta varijabla nalazi samo na jednom mjestu u memoriji i ona je djeljena medu svim instancama klase.
 
Odgovor na temu

vlada_dj
Vladimir Djokic
Beograd

Član broj: 39483
Poruke: 9
*.proxy.astra-net.com.



Profil

icon Re: neophodna pomoc za jedan mali zadatak!29.11.2004. u 14:03 - pre 235 meseci
Sam uslov zadatka je da postoji funkcija koja ce pri svakom pozivu vracati pokazivac na dinamicki niz znakova u kojem je izdvojena jedna rec texta pa sam na osnovu toga zakljucio da bi najbolje bilo da je taj text zajednicki za svaku instancu klase. Zbog toga sam stavio da je on staticka promenljiva. Da bih iterirao kroz taj text potrebne su mi neke promenljive koje sam takodje stavio kao staticke. To sam uradio jer zelim da za svaku rec texta formiram novu instancu klase a staticke promenljive su dobar nacin da se da se zapamti na kojoj reci u textu se stalo i koju treba sledecu izdvojiti. Kao kraj reci koristim uslov da je iterator do sao do blanko znaka odnosno da je *iteratorTexta==' ' kao kraj citavog texta *iteratorTexta=='\0'. Znakovi interpunkcije nisu bitni.

Nadam se da sam vam malo priblizio moju ideju. Ako neko ima neki drugi predlog rado cu ga prihvatiti.

Tokom pracenja izvrsavanja koda primetio sam se izvrsi samo konstruktor
Rec(char*) i to kada se napravi prva instanca klase a pri svakom sledecem kreiranju instance klase char* pom=new Rec() ja ocekujem da ce se izvrsiti konstruktor Rec() modjutim to se izgleda ne desava.

Molio bih da one koji imaju vremena pogledaju kod i kazu mi sta, po njima, ne valja u kodu.
 
Odgovor na temu

vlada_dj
Vladimir Djokic
Beograd

Član broj: 39483
Poruke: 9
*.proxy.astra-net.com.



Profil

icon Re: neophodna pomoc za jedan mali zadatak!30.11.2004. u 17:53 - pre 235 meseci
resio sam problem.
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.adsl.zonnet.nl.

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: neophodna pomoc za jedan mali zadatak!30.11.2004. u 21:53 - pre 235 meseci
Fino, ako si rešio, a ti ga postavi ovde da svi vide.

f
 
Odgovor na temu

vlada_dj
Vladimir Djokic
Beograd

Član broj: 39483
Poruke: 9
*.proxy.astra-net.com.



Profil

icon Re: neophodna pomoc za jedan mali zadatak!01.12.2004. u 11:07 - pre 235 meseci
Pa problem je bio u sledecem:
Da bih sacuvao instance klase koristo sam promenljivu niz koja cuva elemente klase Rec. Nisam uzeo u obzir da u klasi rec imam i pokazivace na dinamicke objekte pa stavljanjem objekata klase rec u niz te dinamicke objekte gubim.
Resenje je sledece:

void main(){

Rec prva("da da da da da"),*niz[100];
niz[0]=&prva;

prva.upisiZnak();
int i=1;
while(!Rec::krajTexta)
Rec* pom=new Rec();
pom->upisiZnak();
niz=pom;
i++;
}
int p=i;
while(i>=0)//ispis reci
{
cout << niz[p-i]->rec << ' ';
i--;
}
}


trebao sam da niz definisem kao niz pokazivaca na Rec!!
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
66.228.70.*



+6 Profil

icon Re: neophodna pomoc za jedan mali zadatak!01.12.2004. u 18:22 - pre 235 meseci
Vlado, molim te da koristiš code tagove kad postuješ kod. Hvala.
 
Odgovor na temu

[es] :: C/C++ programiranje :: neophodna pomoc za jedan mali zadatak!

[ Pregleda: 2699 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

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