![]() Ласло Краус |
Објектно програмирање 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.