![]() Ласло Краус |
Објектно програмирање 1 - колоквијуми Први колоквијум 6. 5. 2012. |
---|
Предмет има назив врсте (ниска) и тежину (double
). Написати на језику C++ класу за предмете. Предвидети:
""
и 0
);
predm1=predm2
);
predm1==predm2
; два предмета су једнака ако имају исте називе и тежине); и
it<<predm
) у облику вртса(
тежина)
.
Полица садржи низ предмета одређеног капацитета и има одређену носивост. Написати на језику C++ класу за предмете. Предвидети:
pol1=pol2
);
pol+=predm
; повратна вредност је индикатор успеха – неуспех је ако на полици нема слободног места или ако би се полица преоптеретила);
pol-=predm
; упржњена места остају празна); и
it<<inv
; први ред је облика [
пошуњено/
капацитет,
терет/
носивост]
, а у наредним редовима, за свако попуњено место, пише се редни број места и предмет на том месту).
Написати на језику C++ програм који направи полицу са 8 места, направи три различита предмета, циклички сатвља те предмете на полицу по четири пута, уклаља са полице предмете једнаких другом предмету и испише садржај полице. Користити константне параметре (не треба ништа учитавати с главног улаза).
ispitx
(x
је број радне станице за којим се ради). Лозинка на свакој радној станици је student
.Z:
.
// predmet.h #include <cstring> #include <iostream> using namespace std; class Predmet { char* vrs; double tez; void kopiraj(const Predmet&p) { vrs = new char [strlen(p.vrs)+1]; strcpy(vrs, p.vrs); tez = p.tez; } void brisi() { delete [] vrs; } public: Predmet(const char* v="", double t=0) { vrs = new char [strlen(v)+1]; strcpy(vrs, v); tez = t; } Predmet(const Predmet& p) { kopiraj(p); } ~Predmet() { brisi(); } Predmet& operator=(const Predmet& p) { if (this != &p) { brisi(); kopiraj(p);} return *this; } const char* vrsta() const { return vrs; } double tezina() const { return tez; } friend bool operator==(const Predmet& p1, const Predmet& p2) { return strcmp(p1.vrs, p2.vrs)==0 && p1.tez==p2.tez; } friend ostream& operator<<(ostream& it, const Predmet& p) { return cout << p.vrs << '(' << p.tez << ')'; } };(садржај)
// polica.h #include "predmet.h" #include <iostream> using namespace std; class Polica { Predmet* predm; int kap; double qmax, q; void kopiraj(const Polica& p); void brisi() { delete [] predm; } public: explicit Polica(int k=10, double maxq=100); Polica(const Polica& p) { kopiraj(p); } ~Polica() { delete [] predm; } Polica& operator=(const Polica& p) { if (this != &p) { brisi(); kopiraj(p);} return *this; } int slobodno() const; double nosivost() const { return qmax; } double teret() const { return q; } bool operator+=(const Predmet& p); Polica& operator-=(const Predmet& p); friend ostream& operator<<(ostream& it, const Polica& p); };
// polica.cpp #include "polica.h" void Polica::kopiraj(const Polica& p) { predm = new Predmet [kap = p.kap]; for (int i=0; i<kap; i++) predm[i] = p.predm[i]; qmax = p.qmax; q = p.q; } Polica::Polica(int k, double maxq) { predm = new Predmet [kap = k]; qmax = maxq; q = 0; } int Polica::slobodno() const { int k = 0; for (int i=0; i<kap; k+=predm[i++]==Predmet()); return k; } bool Polica::operator+=(const Predmet& p) { if (q+p.tezina() > qmax) return false; int i = 0; while (i<kap && !(predm[i]==Predmet())) i++; if (i == kap) return false; predm[i] = p; q += p.tezina(); return true; } Polica&Polica::operator-=(constPredmet& p){ double tez = p.tezina(); for (int i=0; i<kap; i++) if (predm[i] == p) { predm[i] = Predmet(); q -= tez; } return *this; } ostream& operator<<(ostream& it, const Polica& p) { it << '[' << (p.kap-p.slobodno()) << '/' << p.kap << ',' << p.q << '/' << p.qmax << ']' << endl; for (int i=0; i<p.kap; i++) if (!(p.predm[i] == Predmet())) it << i << ": " << p.predm[i] <<endl; return it; }
// program.cpp #include "polica.h" #include <iostream> using namespace std; int main() { Polica pol(8, 50); Predmet p1("lonac", 0.5); Predmet p2("serpa", 0.4); Predmet p3("solja", 0.2); for (int i=0; i<4; i++) { pol += p1; pol += p2; pol += p3; } pol -= p2; cout << pol; return 0; }
[5/8,1.9/50] 0: lonac(0.5) 2: solja(0.2) 3: lonac(0.5) 5: solja(0.2) 6: lonac(0.5)
Copyright © 2012, Laslo Kraus
Последња ревизија: 15.6.2012.