Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje
Uputstvo Članstvo Kalendar Današnje poruke Pretraži

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 9.6.2011, 14:33   #1
marko_arsenal
Član
 
Član od: 5.10.2009.
Poruke: 112
Zahvalnice: 38
Zahvaljeno 9 puta na 6 poruka
Određen forumom Jedno pocetnicko?

Kako da iznesem vrednost promenljive iz for petlje, konkretno u metodi ispod mi vraca stalno prazan string, a necu to?

Kod:
private string filmoviPoZanru(string zanr)
        {
            string str = "";
            for (int i = 0; i < _spisakFilmova.Count; i++)
            {
                if (_spisakFilmova[i].Zanr.DajPodatke() == zanr)
                {
                    str = str + "\n" + nazivFilma(_spisakFilmova[i]);
                }
            }
            return str;
        }
marko_arsenal je offline   Odgovor sa citatom ove poruke
Stara 9.6.2011, 14:50   #2
Sass Drake
V.I.P. Zaštita
 
Član od: 30.9.2007.
Lokacija: Hypnos Control Room, Tokyo Metropolitan Government Building
Poruke: 5.914
Zahvalnice: 1.181
Zahvaljeno 1.320 puta na 1.094 poruka
Određen forumom Re: Jedno pocetnicko?

Zbog čega si stavio metudu u private, a ne u public?
Stavi je u public pa vidi onda da li radi, ali sumnjam da je problem ovo
Kod:
str = str + "\n" + nazivFilma(_spisakFilmova[i]);
jer nisam siguran da je u klasi string preklopljen operator + da radi sa tri promjenljive.
Pokušaj ovako:
Kod:
if (_spisakFilmova[i].Zanr.DajPodatke() == zanr)
        {
        str += "\n" ;
        str += nazivFilma(_spisakFilmova[i]);
        }
Sass Drake je offline   Odgovor sa citatom ove poruke
Stara 9.6.2011, 14:54   #3
Todors
Član
 
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
Određen forumom Re: Jedno pocetnicko?

Jel možeš da staviš i ovu metodu nazivFilma(_spisakFilmova[i]), da vidimo šta i ona radi.
Todors je offline   Odgovor sa citatom ove poruke
Stara 9.6.2011, 15:12   #4
marko_arsenal
Član
 
Član od: 5.10.2009.
Poruke: 112
Zahvalnice: 38
Zahvaljeno 9 puta na 6 poruka
Određen forumom Re: Jedno pocetnicko?

Otkrio sam gresku, ne smem ni da kazem koliko je glupo!
(Lista _spisakFilmova je bila prazna)
marko_arsenal je offline   Odgovor sa citatom ove poruke
Stara 9.6.2011, 19:38   #5
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: Jedno pocetnicko?

Bilo mi je dosadno pa sam ti uzeo ideju sebi za vezbu.
Spoiler za KatalogFilmova:

Kod:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>

enum E_ZANR_FILMA
{
    EZF_NEPOZNAT = 0,
    EZF_HORROR,
    EZF_AKCIJA,
    EZF_DRAMA,
    EZF_TRILER,
    EZF_KOMEDIJA
    // ...i ostali
};

std::ostream& operator << (std::ostream& out, E_ZANR_FILMA _zanr)
{
    switch(_zanr)
    {
    case EZF_HORROR:
        {
            out << "HORROR";
        }break;
    case EZF_AKCIJA:
        {
            out << "AKCIJA";
        }break;
    case EZF_DRAMA:
        {
            out << "DRAMA";
        }break;
    case EZF_TRILER:
        {
            out << "TRILER";
        }break;
    case EZF_KOMEDIJA:
        {
            out << "KOMEDIJA";
        }break;
    default:
        {
            out << "NEPOZNAT";
        }break;
    };
    return out;
}

class Film
{
private:

    std::string  ime;
    E_ZANR_FILMA zanr;
    short        godina;

public:

    Film() : ime(), zanr(EZF_NEPOZNAT), godina(0)
    {
    }

    Film(const Film& f) : ime(f.ime), zanr(f.zanr), godina(f.godina)
    {
    }

    Film(Film&& f) : ime(std::move(f.ime)), zanr(f.zanr), godina(f.godina)
    {
    }

    Film& operator = (const Film& f)
    {
        if(this != &f)
        {
            ime    = f.ime;
            zanr   = f.zanr;
            godina = f.godina;
        }
        return *this;
    }

    Film& operator = (Film&& f)
    {
        if(this != &f)
        {
            ime    = std::move(f.ime);
            zanr   = f.zanr;
            godina = f.godina;
        }
        return *this;
    }

    template<typename TIme, typename TZanr, typename TGod>
    Film(TIme&& _ime, TZanr _zanr, TGod _godina) : ime(std::forward<TIme>(_ime)), zanr(_zanr), godina(_godina)
    {
    }

    template<typename TIme>
    void PostaviIme(TIme&& _ime)
    {
        ime = std::forward<TIme>(_ime);
    }

    void PostaviZanr(E_ZANR_FILMA _zanr)
    {
        zanr = _zanr;
    }

    void PostaviGodinu(short _godina)
    {
        godina = _godina;
    }

    const std::string& Ime() const
    {
        return ime;
    }

    E_ZANR_FILMA Zanr() const
    {
        return zanr;
    }

    short Godina() const
    {
        return godina;
    }

    friend class FPoImenu;
    friend class FPoZanru;
    friend class FPoGodini;
    friend class FOdredjenZanr;
};

class FPoImenu
{
public:
    bool operator () (const Film& l, const Film& d) const
    {
        return l.ime < d.ime;
    }
};

class FPoZanru
{
public:
    bool operator () (const Film& l, const Film& d) const
    {
        return l.zanr < d.zanr;
    }
};

class FPoGodini
{
public:
    bool operator () (const Film& l, const Film& d) const
    {
        return l.godina < d.godina;
    }
};

class FOdredjenZanr
{
private:
    E_ZANR_FILMA zanr;
public:
    FOdredjenZanr(E_ZANR_FILMA _zanr) : zanr(_zanr)
    {
    }
    bool operator () (const Film& _film) const
    {
        return zanr == _film.zanr;
    }
};

class KatalogFilmova
{
private:

    std::vector<Film> vfilmovi;

    class IspisiFilmove
    {
    public:
        void operator () (const Film& _film) const
        {
            std::cout << "ime: " << _film.Ime() << ", god.: " << _film.Godina() << ", zanr: " << _film.Zanr() << std::endl;
        }
    };

public:

    KatalogFilmova()
    {
        vfilmovi.reserve(8);

        vfilmovi.push_back(Film("The Last Castle", EZF_AKCIJA, 2004));
        vfilmovi.push_back(Film("Amos And Andrew", EZF_KOMEDIJA, 1995));
        vfilmovi.push_back(Film("The Fourth Protocol", EZF_AKCIJA, 1998));
        vfilmovi.push_back(Film("Borderline", EZF_DRAMA, 2002));
        vfilmovi.push_back(Film("Just Married", EZF_KOMEDIJA, 1986));
        vfilmovi.push_back(Film("15 Minutes", EZF_TRILER, 2000));
        vfilmovi.push_back(Film("Hero", EZF_DRAMA, 1993));
        vfilmovi.push_back(Film("Cube 2", EZF_HORROR, 2009));
    }

    void IspisiListuNesortiranu()
    {
        std::cout << "==================== FILMOVI, NESORTIRANI ====================" << std::endl;
        std::for_each(vfilmovi.begin(), vfilmovi.end(), IspisiFilmove());
    }

    void IspisiListuPoImenu()
    {
        std::cout << "==================== FILMOVI, PO IMENU ====================" << std::endl;
        std::sort(vfilmovi.begin(), vfilmovi.end(), FPoImenu());
        std::for_each(vfilmovi.begin(), vfilmovi.end(), IspisiFilmove());
    }

    void IspisiListuPoZanru()
    {
        std::cout << "==================== FILMOVI, PO ZANRU ====================" << std::endl;
        std::sort(vfilmovi.begin(), vfilmovi.end(), FPoZanru());
        std::for_each(vfilmovi.begin(), vfilmovi.end(), IspisiFilmove());
    }

    void IspisiListuPoGodini()
    {
        std::cout << "==================== FILMOVI, PO GODINI ====================" << std::endl;
        std::sort(vfilmovi.begin(), vfilmovi.end(), FPoGodini());
        std::for_each(vfilmovi.begin(), vfilmovi.end(), IspisiFilmove());
    }

    void IspisiListuOdredjenogZanra(E_ZANR_FILMA _zanr)
    {
        std::cout << "==================== FILMOVI, " << _zanr << " ZANRA ====================" << std::endl;
        std::vector<Film>::iterator vitr = std::partition(vfilmovi.begin(), vfilmovi.end(), FOdredjenZanr(_zanr));
        std::for_each(vfilmovi.begin(), vitr, IspisiFilmove());
    }
};

int main()
{
    {
        KatalogFilmova k;
        k.IspisiListuNesortiranu();
        k.IspisiListuPoImenu();
        k.IspisiListuPoZanru();
        k.IspisiListuPoGodini();
        k.IspisiListuOdredjenogZanra(EZF_AKCIJA);
    }

    std::cout << "Press enter to exit...";
    std::cin.get();
    return 0;
}


ako neko primeti neku gresku ili misli da je moglo drugacije, neka se izjasni.

Edit: Dodato izlistavanje po odredjenom zanru.

Poslednja ispravka: Belphegor (9.6.2011 u 20:17) Razlog: dodaci u kodu
Belphegor je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Belphegor na korisnoj poruci:
EclipsE (9.6.2011)
Stara 10.6.2011, 11:24   #6
irreal
V.I.P. Programiranje
 
Član od: 9.1.2009.
Lokacija: Beograd, Banovo Brdo
Poruke: 1.157
Zahvalnice: 83
Zahvaljeno 448 puta na 303 poruka
Određen forumom Re: Jedno pocetnicko?

Citat:
Sass Drake kaže: Pregled poruke
Zbog čega si stavio metudu u private, a ne u public?
Stavi je u public pa vidi onda da li radi, ali sumnjam da je problem ovo
Kod:
str = str + "\n" + nazivFilma(_spisakFilmova[i]);
jer nisam siguran da je u klasi string preklopljen operator + da radi sa tri promjenljive.
Pokušaj ovako:
Kod:
if (_spisakFilmova[i].Zanr.DajPodatke() == zanr)
        {
        str += "\n" ;
        str += nazivFilma(_spisakFilmova[i]);
        }
problem je resen u medjuvremenu (i bilo je jasno da greske kod scope-a varijable nema).

al cisto da znas za ubuduce, da li je funkcija private ili public utice na njenu vidljivost iz ostatka koda i utice na to odakle ce moci da je poziva a odakle ne (dakle, ako je private moze da je poziva samo unutar klase u kojoj se nalazi, ne preko reference ka instanci klase u kojoj se nalazi)

drugo, apsolutno mozes da nizes sa + kolko hoces jer se razresava jedno po jedno, bez potrebe da se nesto posebno "preklapa" + operater
irreal je offline   Odgovor sa citatom ove poruke
Stara 10.6.2011, 13:31   #7
Sass Drake
V.I.P. Zaštita
 
Član od: 30.9.2007.
Lokacija: Hypnos Control Room, Tokyo Metropolitan Government Building
Poruke: 5.914
Zahvalnice: 1.181
Zahvaljeno 1.320 puta na 1.094 poruka
Određen forumom Re: Jedno pocetnicko?

^ Jel meni govoriš ovo za public, protected i private? Ja to već znam, a što se tiče preklapanja operatora +, ako ti se kao rezultat ne vraća objekat iste vrste kao i operandi (npr. vraća long umjesto "NekaKlasa"), ne može se nizati koliko hoćeš, nažalost.
Sass Drake je offline   Odgovor sa citatom ove poruke
Stara 10.6.2011, 13:56   #8
Todors
Član
 
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
Određen forumom Re: Jedno pocetnicko?

Pa potpuno ti je sve jedno da lićeš koristiti a += b ili a = a + b! Ne razumem zašto bi se ova dva načina razlikovala u bilo kojem slučaju.
Todors je offline   Odgovor sa citatom ove poruke
Stara 10.6.2011, 14:17   #9
Sass Drake
V.I.P. Zaštita
 
Član od: 30.9.2007.
Lokacija: Hypnos Control Room, Tokyo Metropolitan Government Building
Poruke: 5.914
Zahvalnice: 1.181
Zahvaljeno 1.320 puta na 1.094 poruka
Određen forumom Re: Jedno pocetnicko?

^ Nisam mislio na to nego na ovo:

a = Obj1 + Obj2 , gdje je a npr. long, a operator je preklopljen tako da vraća long. U tom slučaju ovo neće da radi: a = Obj1 + Obj2 + Obj3.
irreal, sad opet pročitah kod u prvom postu, moja greška, zaboravio sam da ispravan IDE ne bi dozvolio kompajliranje u slučaju da pokuša da pristupi direktno članu u private. DevCPP tu ne ubrajam.
Sass Drake je offline   Odgovor sa citatom ove poruke
Stara 10.6.2011, 14:55   #10
Todors
Član
 
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
Određen forumom Re: Jedno pocetnicko?

Da slažem se za objekat, al otkud ti onda to da je metoda nazivFilma objekat?
Todors je offline   Odgovor sa citatom ove poruke
Stara 10.6.2011, 15:02   #11
Sass Drake
V.I.P. Zaštita
 
Član od: 30.9.2007.
Lokacija: Hypnos Control Room, Tokyo Metropolitan Government Building
Poruke: 5.914
Zahvalnice: 1.181
Zahvaljeno 1.320 puta na 1.094 poruka
Određen forumom Re: Jedno pocetnicko?

^ Mislio sam uopšteno, a ne na program o filmovima mada nigdje nisam napisao da je nazivFilma objekat.
Sass Drake je offline   Odgovor sa citatom ove poruke
Stara 10.6.2011, 17:15   #12
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: Jedno pocetnicko?

Citat:
Todors kaže: Pregled poruke
Pa potpuno ti je sve jedno da lićeš koristiti a += b ili a = a + b! Ne razumem zašto bi se ova dva načina razlikovala u bilo kojem slučaju.
Nevezano sa ovim postom ima razlike , kod:
Kod:
a = a + b;
pravi privremeni objekat od opercije a+b i dodeljuje vrednost u a, a
Kod:
a += b
apenduje vrednost b u a.
Obicno kad se overloaduje operator + on vraca privremen objekat:
Kod:
Foo operator + (const Foo& o)
a operator += vraca referencu:
Kod:
Foo& operator += (const Foo& o)
Mada je svejedno ako brzina nije bitna.
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 10.6.2011, 17:27   #13
irreal
V.I.P. Programiranje
 
Član od: 9.1.2009.
Lokacija: Beograd, Banovo Brdo
Poruke: 1.157
Zahvalnice: 83
Zahvaljeno 448 puta na 303 poruka
Određen forumom Re: Jedno pocetnicko?

Citat:
Sass Drake kaže: Pregled poruke
irreal, sad opet pročitah kod u prvom postu, moja greška, zaboravio sam da ispravan IDE ne bi dozvolio kompajliranje u slučaju da pokuša da pristupi direktno članu u private. DevCPP tu ne ubrajam.
em to, em kako god taj kod bio pozvan, on je rekao da dobija rezultat ali prazan, a ne da ne dobija nikakav rezultat, tako da je podatak o tome da li je funkcija private, public ili protected totalno ne bitan jer on taj kod nekako poziva, samo nije radio kako treba.

a sto se tice nizanja, jedna je stvar da li "radi" vezivanje 3 za redom a druga da li si ti kriv sto pokusavas da nizes nesto sto vraca drugi tip varijable.

dakle, nizanje vise za redom svakako radi, ali ako se zadese razliciti tipovi koji ne mogu da se vezu naravno da ce izbaciti gresku i da nece magicno proraditi

u svkaom slucaju, mislim da smo apsolvirali temu.
irreal je offline   Odgovor sa citatom ove poruke
Stara 10.6.2011, 18:05   #14
Todors
Član
 
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
Određen forumom Re: Jedno pocetnicko?

Citat:
Belphegor kaže: Pregled poruke
Nevezano sa ovim postom ima razlike , kod:
Kod:
a = a + b;
pravi privremeni objekat od opercije a+b i dodeljuje vrednost u a, a
Kod:
a += b
apenduje vrednost b u a.
Obicno kad se overloaduje operator + on vraca privremen objekat:
Kod:
Foo operator + (const Foo& o)
a operator += vraca referencu:
Kod:
Foo& operator += (const Foo& o)
Mada je svejedno ako brzina nije bitna.
Nije šija nego vrat. Al dobro, bolja je praksa da se koristi složeni operator dodele od jednostavnog, ali ni jedno ni drugo nije pogrešno.
Todors je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi


Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


Slične teme
tema temu započeo forum Odgovora Poslednja poruka
Pomagajte oko kupovine novog kompa + jedno pitanje Inadzija Šta da kupim? 13 15.11.2010 0:51
Jedno pitanjce Ekku Grafika 3 25.2.2010 0:45
Jedno pitanje Gradimir Video/TV softver 2 30.3.2009 16:13
Jedno pitanjce oko HT linka hiperborean Overklok 15 1.3.2009 23:53
Vazno za sve - novi virusi Ronin Zaštita 88 17.11.2006 17:03


Sva vremena su po Griniču +2 h. Sada je 3:21.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com