Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 24.9.2009, 11:05   #1
zlatkoiv
Novi član
 
Član od: 16.9.2009.
Lokacija: Prnjavor, Republika Srpska
Poruke: 6
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
Slanje poruke preko MSN-a korisniku zlatkoiv Slanje poruke preko Skypea korisniku zlatkoiv
Određen forumom Problem pakovanja ranca

E ljudi imam ovakav problem za ispit i trebam pomoc:
Napisati C++ kod koji simulira korišćenje ranaca. Svaki ranac ima određen zapreminski kapacitet, izražen u litrama, kao i nosivost, izraženu u kilogramima. U ranac se može ubaciti razni teret, koji ima svoju zapreminu i težinu. U svakom trenutku moguće je saznati koliko je prostora ostalo slobodno u rancu, ali ne i kolika je preostala nosivost ranca. Ukoliko se u ranac ubaci više kilograma nego što je njegova nosivost, ranac će da pukne i potrebno ga je zašiti.


Napisati apstraktnu klasu Ranac, sa javnim metodama:
  • float kapacitet()
  • float slobodno()
  • void ubaci(Teret& t)
  • void sadrzaj()
  • bool citav()
  • void registrujPosmatraca(Posmatrac& p)
  • void zakrpi()
Prve dvije metode vraćaju ukupni i preostali (zapreminski) kapacitet ranca. Treća ubacuje neki teret u ranac. Ukoliko se pokuša ubaciti teret čija je zapremina veća od preostale slobodne zapremine ranca, metoda treba da baci izuzetak tipa PrekoracenjeKapaciteta (tu klasu treba izvesti iz klase exception). Međutim, ukoliko dođe do prekoračenja nosivosti ranca, dolazi do pucanja ranca i potrebno ga je zakrpiti (na kasnije opisan način). Četvrta metoda na ekran ispisuje kompletan sadržaj ranca (za svaki komad tereta se ispisuje njegov naziv). Peta vraća true ukoliko je ranac još uvijek čitav (tj. nije pukao), a false u suprotnom. Posljednje dvije metode služe za rad sa švaljama (koje krpe rance), što će biti detaljnije objašnjeno. Iz klase Ranac izvesti (neapstraktne) klase Transalp, Odyssee i Contour, bez novih metoda, sa kapacitetima i nosivošću od 90 lit/30 kg, 50 lit/20 kg i 30 lit/12kg respektivno.

Za klasu ranac napisati „fabriku“ (koristeći Factory šablon), sa statičkom metodom:
  • Ranac& noviRanac(string tip)
Tip ranca može biti „mali“, „srednji“ ili „veliki“; metoda vraća novu instancu Ranca odgovarajućeg tipa: Contour za mali, Odyssee za srednji i Transalp za veliki.

U svrhu simuliranja tereta, napisati apstraktnu klasu Teret sa interfejsom:
  • string naziv()
  • float tezina()
  • float zapremina()
Iz nje izvesti (neapstraktne) klase Odjeca, Hrana i Posudje.

Konačno, napisati i klase Posmatrac, i iz nje izvedenu klasu Svalja. Posmatrači posmatraju rance (po Observer šablonu), i imaju metodu:
  • void promjena(Ranac* r, string tip)
Švalje reaguju samo na promjene tipa „pucanje“. Kao odgovor na pucanje, švalje krpe odgovarajući ranac. Svaka švalja ima svoje ime.

Trebaju mi ideje i uputstva kako da rijesim nesto sam poceo ali mislim da nisam na dobrom putu. Treba mi pomoc kako da napravim apstraktnu klasu Ranac i iz nje da izvedem ove druge i tako to...
zlatkoiv je offline   Odgovor sa citatom ove poruke
Stara 29.9.2009, 11:14   #2
zlatkoiv
Novi član
 
Član od: 16.9.2009.
Lokacija: Prnjavor, Republika Srpska
Poruke: 6
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
Slanje poruke preko MSN-a korisniku zlatkoiv Slanje poruke preko Skypea korisniku zlatkoiv
Određen forumom Re: Problem pakovanja ranca

Kod:
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;

class Ranac{
      public:
             virtual float kapacitet();
             virtual float slobodno();
             virtual void ubaci(string i,float n,float z);
      protected:
                float zapremina;
                float nosivost;
                string predmet;
                float nos,zap,ostatak;
                string naz; 
};
void Ranac::ubaci(string i,float n,float z){
     naz=i;
     nos=n;
     zap=z;
}
float Ranac::kapacitet(){
      return zapremina;
};
float Ranac::slobodno(){
      ostatak=zapremina-zap;
      return ostatak;
};
class Transalp:public Ranac{
                        public:
                               Transalp(){
                                          zapremina=90;
                                          nosivost=30;
                                          }
      };
class Odyssee:public Ranac{
                     public:
                            Odyssee(){
                                      zapremina=50;
                                      nosivost=20;
                                      }
      };
class Contour:public Ranac{
                     public:
                            Contour(){
                                      zapremina=30;
                                      nosivost=12;
                                      }
      };
class Teret{
      public:
             Teret(string i,float n,float z){
                          naziv();
                          tezina();
                          zapremina();
                          }
             string naziv(){
                    cout<<"Unesite naziv predmeta koji se ubacuje:";
                    getline(cin,ime);
                    return ime;
                    }
             float tezina(){
                   cout<<"Unesite tezinu predmeta:";
                   cin>>nos;
                   return nos;
                   }
             float zapremina(){
                   cout<<"Unesite zapreminu predmeta:";
                   cin>>zap;
                   return zap;
                   }
      private:
              string ime;
              float zap;
              float nos;
};
Evo nesto sam uradio ali kako napraviti da Ranac bude apstraktna klasa odnosno to znam npr. virtual float kapacitet()=0; ali kako onda dole u main kosistiti tu funkciju e to nikako da rijesim...

Poslednja ispravka: VojaM (29.9.2009 u 16:09) Razlog: ubačeni code tagovi da zagrade ne bi postale smajliji
zlatkoiv je offline   Odgovor sa citatom ove poruke
Stara 29.9.2009, 11:25   #3
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom Re: Problem pakovanja ranca

Citat:
zlatkoiv kaže: Pregled poruke

Evo nesto sam uradio ali kako napraviti da Ranac bude apstraktna klasa odnosno to znam npr. virtual float kapacitet()=0; ali kako onda dole u main kosistiti tu funkciju e to nikako da rijesim...
Da bi klasa bila apstraktna, mora da sadrzi makar jednu pure virtual funkciju, znaci: virtual [povratna vrednost] [ime]() = 0;

Ne mozes ih koristiti zato sto nije moguce instancirati apstraktne klase. Potrebno je da iz nje izvedes odredjene i overrideujes sve pure virtual funkcije.
MG-RAY je offline   Odgovor sa citatom ove poruke
Stara 29.9.2009, 11:53   #4
zlatkoiv
Novi član
 
Član od: 16.9.2009.
Lokacija: Prnjavor, Republika Srpska
Poruke: 6
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
Slanje poruke preko MSN-a korisniku zlatkoiv Slanje poruke preko Skypea korisniku zlatkoiv
Određen forumom Re: Problem pakovanja ranca

OK to otprilike znam ali moze li neki primjer... Ako moze evo ovaj primjer iznad sto sam napravio...
zlatkoiv je offline   Odgovor sa citatom ove poruke
Stara 1.10.2009, 21:10   #5
Geomaster
V.I.P. Programiranje
 
Član od: 28.6.2007.
Lokacija: Beograd
Poruke: 2.342
Zahvalnice: 2.836
Zahvaljeno 1.047 puta na 507 poruka
Slanje poruke preko MSN-a korisniku Geomaster Slanje poruke preko Skypea korisniku Geomaster
Određen forumom Re: Problem pakovanja ranca

Citat:
MG-RAY kaže: Pregled poruke
Da bi klasa bila apstraktna, mora da sadrzi makar jednu pure virtual funkciju, znaci: virtual [povratna vrednost] [ime]() = 0;

Ne mozes ih koristiti zato sto nije moguce instancirati apstraktne klase. Potrebno je da iz nje izvedes odredjene i overrideujes sve pure virtual funkcije.
Ček ček, ja sam mislio da ne moraju da budu pure virtuelne funkcije, zar ne bi bilo dovoljno:
Kod:
virtual int foo();
Tako je nešto pisalo na www.cplusplus.com, ako se ne varam, a varam se (verovatno)... A na kraju krajeva, trebalo bi i da pure virtual funkcije mogu kasnije da se upotrebe, ako se linkuju sa .dll fajlom. Ili se opet varam?
Geomaster je offline   Odgovor sa citatom ove poruke
Stara 2.10.2009, 8:45   #6
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom Re: Problem pakovanja ranca

Citat:
Geomaster kaže: Pregled poruke
Ček ček, ja sam mislio da ne moraju da budu pure virtuelne funkcije, zar ne bi bilo dovoljno:
Kod:
virtual int foo();
Tako je nešto pisalo na www.cplusplus.com, ako se ne varam, a varam se (verovatno)... A na kraju krajeva, trebalo bi i da pure virtual funkcije mogu kasnije da se upotrebe, ako se linkuju sa .dll fajlom. Ili se opet varam?
Noup, ako funkciju ne obelezis kao pure, moras da joj zadas deklaraciju, u protivnom je izostavljas iz bazne klase i definises u izvedenoj...

Uh... Pojma nemam...

Poslednja ispravka: MG-RAY (2.10.2009 u 8:54)
MG-RAY je offline   Odgovor sa citatom ove poruke
Stara 2.10.2009, 13:42   #7
Geomaster
V.I.P. Programiranje
 
Član od: 28.6.2007.
Lokacija: Beograd
Poruke: 2.342
Zahvalnice: 2.836
Zahvaljeno 1.047 puta na 507 poruka
Slanje poruke preko MSN-a korisniku Geomaster Slanje poruke preko Skypea korisniku Geomaster
Određen forumom Re: Problem pakovanja ranca

Citat iz jednog .h fajla (samo sam uzeo primer):
Kod:
virtual IMeshWriter* createMeshWriter(EMESH_WRITER_TYPE type) = 0;
Jasno vidim da je ovo pure virtual metod, međutim ne postoji nijedna klasa izvedena iz te gore, što znači da izvedena klasa ne overrideuje ove metode, nego se oni importuju iz .dll-a.

A sad mi baš ništa nije jasno.
Geomaster je offline   Odgovor sa citatom ove poruke
Stara 2.10.2009, 16:47   #8
rile
Član
 
Član od: 9.7.2007.
Poruke: 119
Zahvalnice: 2
Zahvaljeno 31 puta na 29 poruka
Određen forumom Re: Problem pakovanja ranca

Evo jednostavnog primera iz knjige Brucea Eckela "Thinking in C++, 2nd ed. Volume 1" (postoji i prevod na sprski jezik)

U poglavlju "Abstract base classes and pure virtual functions" govori se detaljno o tome.

Knjiga se može besplatno skinuti odavde: http://www.mindview.net/Books/DownloadSites

Kod:
// Pure abstract base classes
#include <iostream>
using namespace std;
enum note { middleC, Csharp, Cflat }; // Etc.

class Instrument {
public:
  // Pure virtual functions:
  virtual void play(note) const = 0;
  virtual char* what() const = 0;
  // Assume this will modify the object:
  virtual void adjust(int) = 0;
};
// Rest of the file is the same ...

class Wind : public Instrument {
public:
  void play(note) const {
    cout << "Wind::play" << endl;
  }
  char* what() const { return "Wind"; }
  void adjust(int) {}
};

class Percussion : public Instrument {
public:
  void play(note) const {
    cout << "Percussion::play" << endl;
  }
  char* what() const { return "Percussion"; }
  void adjust(int) {}
};

class Stringed : public Instrument {
public:
  void play(note) const {
    cout << "Stringed::play" << endl;
  }
  char* what() const { return "Stringed"; }
  void adjust(int) {}
};

class Brass : public Wind {
public:
  void play(note) const {
    cout << "Brass::play" << endl;
  }
  char* what() const { return "Brass"; }
};

class Woodwind : public Wind {
public:
  void play(note) const {
    cout << "Woodwind::play" << endl;
  }
  char* what() const { return "Woodwind"; }
};

// Identical function from before:
void tune(Instrument& i) {
  // ...
  i.play(middleC);
}

// New function:
void f(Instrument& i) { i.adjust(1); }

int main() {
  Wind flute;
  Percussion drum;
  Stringed violin;
  Brass flugelhorn;
  Woodwind recorder;
  tune(flute);
  tune(drum);
  tune(violin);
  tune(flugelhorn);
  tune(recorder);
  f(flugelhorn);
}

Poslednja ispravka: VojaM (6.10.2009 u 13:14) Razlog: Bruce Eckel-ove -->knjige Brucea Eckela... e, moja srpska jeziko...
rile je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi

Alatke vezane za temu
Vrste prikaza

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
Problem sa Adobe Flash performansama na Windows Vista x64 Home Premium OS-u VladimirBalt Kvarovi 0 23.8.2009 0:29
Gigabyte NX96T 9600GT, čudan problem De_Italiano Grafika 7 19.7.2009 19:31
Problem sa WiFi-om... matke Kvarovi 1 11.1.2008 14:51
Veliki problem sa RAM memorijom leka Kvarovi 10 27.7.2006 10:17


Sva vremena su po Griniču +2 h. Sada je 15:26.


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