[ nihad3tzo @ 04.01.2008. 12:21 ] @
Postovanje i pozdravi svim clanovima foruma,novi sam na forumu i ovo mi je prvo javljanje.Student sam i studiram programiranje(pocetnik) i molio bih vas za pomoc .Naime radim projekat iz c++(to nam je umjesto ispita) i zapeo sam na jednom problemu.Treba da napravim klasu koja mora sadrzavati ime filma,kolko je puta pregledan film i rating filma uradio sam vecinu koda(valjda je dobro,funkcionise zasad) ali ne znam kako da napravim da mogu ukucavati vishe filmova i za svaki film rejting i koliko je puta pregledan! U mom kodu mogu postaviti samo jedan film i za njega navedene parametre,takodje nemogu nikako da napishem text npr. "movie name" funkcionishe i kad se run-a pise fino movie name i ime filma,ali ne znam u liniji ispod napisati kod da se ispisuje i movie rating i ispred rating filma !molim za pomoc jer stvarno ne znam kako da to kodiram.
Ispod je kod koji sam napisao:

Code:

#include<iostream>
#include<string>
using namespace std;
class movies
{
     private:
         string movieName;
         int movieWatch;
         string movieRating;
         
     public:
            void displayMessage1()
            {
                 cout<<"Movie name: ";
                 }
         
            void setMovieName(string movieName_new)
              {
                     movieName=movieName_new;
                     }
                     string getMovieName()
                     {
                            return movieName;
                            }              
             void setMovieWatch(int movieWatch_new)
              {
                     movieWatch=movieWatch_new;
                     }
                     int getMovieWatch()
                     {
                            return movieWatch;
                            }                 
             void setMovieRating(string movieRating_new)
              {
                     movieRating=movieRating_new;
                     }
                     string getMovieRating()
                     {
                            return movieRating;
                            }                              
};
int main()
{
    movies movie;
    movie.displayMessage1();
    movie.setMovieName("four brothers");
    cout<<movie.getMovieName()<<endl;
     movie.setMovieWatch(14);
    cout<<movie.getMovieWatch()<<endl;
    movie.setMovieRating("*****");
    cout<<movie.getMovieRating()<<endl;
    
    
    system("pause");
    return 0;
}


EDIT: X Files : Molim Vas da zbog preglednosti, kod upisujete između tag-ova predviđenih za to:

[code]
int main ( int argc, char *argv[] )
{
// ...
return 0;
}
[/code]

Hvala na razumevanju i srećan rad.


[Ovu poruku je menjao X Files dana 04.01.2008. u 18:41 GMT+1]
[ xeron @ 04.01.2008. 14:30 ] @
Koristiš tzv. kontejnerske klase. Znaci napravis klasu Film i klasu Filmovi. Klasa Filmovi će biti kontejnerska klasa koja se se koristiti za pohranjivanje niza objekata tipa Film.
[ nihad3tzo @ 04.01.2008. 16:09 ] @
Hvala velika na pomoci,mislim da sam shvatio kako to funkcionise . . .bacam se na posao:D
[ Branimir Maksimovic @ 04.01.2008. 17:36 ] @
Imas standardne kontejnerske klase, u ovom slucaju bi bile interesantne list ili vector.
Ovo je reference za listu:
http://www.sgi.com/tech/stl/List.html

Pozzzzzz!
[ Sephiroth? @ 04.01.2008. 17:45 ] @
Evo par savjeta:

1.) obavezno nabavi sebi neku knjigu po kojoj ces sam uciti C++, te je isto koristiti kada nesto zapne. Probaj Teach Yourself C++ in 21 Days by Jesse Liberty. Nije opsirna, dobra je za pocetnike, dobra je za neke osnovne elemente jezika.

2.) Pripazi malo na izgled koda, stil uvlacenja i ostalo. Ovako napisan kod ti je veoma nepregledan. Koristi uvlacenje redova, vertikalno ravnanje, koristenje praznih redova izmedju linija koda da naglasis vaznost pojedinih blokova.

3.) Za pocetak, evo tvoje klase u malo promijenjenom izdanju:

Code:


class Movie
{
    private:
            
 string title;
 int timesWatched;
 string rating;

    public:
 
 Movie() {} // prazan konstruktor
 Movie(string newTitle, int newTimes, string newRating);
 
 // get metode
 string getTitle() const { return title; }
 int getTimesWatched() const { return timesWatched; }
 string getRating() const { return rating; }
 
 //set metode
 void setTitle(string newTitle) { title = newTitle; }
 void setTimesWatched(int newTimes) { timesWatched = newTimes; }
 void setRating(string newRating) { rating = newRating; }

};

// konstruktor sa parametrima, prototip deklarisan u klasi
Movie::Movie(string newTitle, int newTimes, string newRating)
 {
  title = newTitle;
  timesWatched = newTimes;
  rating = newRating;
 }



- include <string> ti ne treba, klasa je ukljucena preko using namespace std
- imena varijabli kao movieName su ti dobra, ali npr. ovo movie ti je suvisno. Dovoljno ti je name, jer ti ova varijabla pripada Movie klasi, to dovoljno govori o njoj. Ostale varijable takodjer. Ipak, promijenio sam name u title, jer se ipak radi o nazivu filma.
- Sve metode su ti inline. Za znacenje inline potrazi po netu malo, ili po ovome forumu. Uglavnom, one su inline jer si ih implementirao odmah u klasi. Ne znam da li je ovo namjerno ili ne.
- Nemas konstruktora. Za pojam konstruktora takodjer malo potrazi po netu. Pomocu njega znatno olaksavas unos u tvom primjeru.

Sto se tice zadatka koji trebas uraditi, ideja je slijedeca. Tebi treba nesto slicno bazi podataka filmova. Znaci, moras imati jednu klasu koja ti sprema podatke o datom fimu. To ti je gornja klasa Movie. Zatim, treba ti klasa koja ce spremati vise tipova podataka Movie, te tako ciniti datu bazu. Naravno, ovo mozes uraditi i strukturnim programiranjem u samoj funkciji main(). Napravis niz tipa Movie, spremas filmove u njega, par petlji da ga ispises i to je otprilike to. Mislim da tebe navise buni to sto mislis da od jedne klase mozes napraviti samo jednu instancu(objekat, kako god…). To nije tacno:

Code:


Movie A;
Movie B;

A.setMovieName(“Gladiator”);
B.setMovieName(“Titanik”);

cout << A.getMovieName() << endl;
cout << B.getMovieName() << endL;



Ovo bi bilo koristeci tvoju klasu.

Ipak, puno ljepsi, bolji, efikasniji nacin je pomocu objektnog programiranja. Napravis klasu koja ce “glumiti” bazu podataka filmova.

Code:


class Movies
{
    private:
            
 Movie *data;        // pointer za spremanje niza
 int dataCount;      // broj filmova u bazi
 int size;           // velicina baze
 
    public:
 
 Movies() {}         // prazan konstruktor
 Movies(int newSize);  // konstruktor sa parametrom size
 
 void insert(Movie newMovie);    // insert sluzi za stavljanje filmova u bazu
 Movie getMovie(int index);    // pomocu getMovie(), moze se "dohvatiti" bilo koji film
 void show(int index);      // show() je samo za ispis pojedinog filma
};

// konstruktor sa parametrom size
Movies::Movies(int newSize)
 {
  size = newSize;
  data = new Movie[size];
  dataCount = 0;
 }


void Movies::insert(Movie newMovie)
 {
  if (dataCount >= size)
   cout << "Memory full" << endl;
  else
   {
    data[dataCount] = newMovie;
    dataCount++;
   }
 }
 


Movie Movies::getMovie(int index)
 {
  if ( (index >= 0) && (index < dataCount) )
   return data[index];
  else
   return data[0];
 }
 
 

void Movies::show(int index)
 {
  if ( (index >= 0) && (index < dataCount) )
   {
    Movie toShow = data[index];
    cout << "Naziv filma: " << toShow.getTitle() << endl;
    cout << "Broj pregleda: " << toShow.getTimesWatched() << endl;
    cout << "Rating: " << toShow.getRating() << endl; 
   }
  else
   cout << "Film pod tim brojem ne postoji!" << endl;
 }




Problem oko tvoga zadatka je sto bi se trebalo upotrijebiti dosta tehnika da se uradi efikasno (ne znam koliko si upoznat sa njima): dinamicko alociranje, nizovi (ili neka slozenija struktura podataka), pointeri…

Sto se tice samih pointera, da te ne zbunjujem: dovoljno je znati slijedece:

Code:

int *pointer;
pointer = new int[10];

ti je isto kao da si napisao:

int pointer[10];



Radi se o nizovima naravno… U zadatku se implementira niz filmova.

Evo kako bi to izgledalo da se implementira:

Code:

// main funkcija
int main(void)
 {
  Movie A("Gladijator", 12, "***");
  Movie B("Titanik", 1, "*");
  
  Movies database(2);
  
  database.insert(A);
  database.insert(B);
  
  database.show(1);
  
  Movie C = database.getMovie(0);
  cout << "\n" << C.getTitle() << endl;
  
  system("pause");
  return EXIT_SUCCESS;
 }


Cijeli kod je u attachmentu...
[ Branimir Maksimovic @ 04.01.2008. 18:24 ] @
samo da dodam using namespace std; uvlaci u deklarativni region sve iz namespace-a std,
ali to ne znaci da ce i includovati sve zivo, vec samo ono sto je definisano u datom fajlu.
Dakle #include <string> jeste neophodno ako se koristi string, a potom using... povlaci
sve includovane definicije iz std-a u global scope.

Pozzzzzz!
[ nihad3tzo @ 04.01.2008. 20:22 ] @
Hvala velika svima ,posebno denisu, cijenim trud ulozen u pisanje ovako velikog posta . . .knjigu sam vec narucio trebla bi stic za koji dan,a dosta sam shvatio stvari iz denisovog posta!
Hvala josh jednom,ovo mi je od velike pomoci!
pozzz
[ Sephiroth? @ 04.01.2008. 21:08 ] @
Nista, zato smo tu da pomognemo. Ti se samo trudi dalje... Pozdrav!