Ласло Краус |
СИ2ОО1 Први колоквијум 23. 10. 2012. |
|---|
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) Ако су a, b и c целобројне промељиве, да ли су формално дозвољени изрази: (1) a+b=c (2) (a=b)=c (3) ++ ++а (4) а-- -- (5) (a?b:c)=10
б) Навести који су приступи члановима објекта x класе X дозвољени, а који нису:
class X{int a; void m(){}; public: void jm(){}; int ja;
private: int pa; void pm(){}};
void main(){X x; x.a=10; x.m(); x.jm(); x.ja=10; x.pa=10; x.pm();}
в) Шта је проблем у следећем програму:
class X{int a; public: X(int i):a(i){}};
void main(){X n=new X[10];}
Написати на језику C++ следеће класе (класе опремити оним конструкторима и деструктором који су потребни за безбедно коришћење класа):
(црвена,зелена,плава).
/боја.
(10 поена) Написати на језику C++ програм који направи једну цвећару, дода неколико цветова и испише на главном излазу цветове одабране боје. Користити фиксне параметре – није потребно ништа учитавати с главног улаза.
#include <iostream>
#include <cstring>
using namespace std;
class Boja {
int crv, zel, pla;
public:
explicit Boja(int cv=0, int z=0, int p=0) { crv = cv, zel = z, pla = p; }
int crvena() const { return crv; }
int zelena() const { return pla; }
int plava () const { return pla; }
friend bool iste(Boja b1, Boja b2){
return b1.crv==b2.crv &&
b1.zel==b2.zel && b1.pla==b2.pla;
}
void pisi() const { cout << '(' << crv << ',' << zel << ',' << pla <<')'; }
};
class Cvet {
char* naziv;
Boja boja;
public:
Cvet(const char* n, Boja b) {
naziv = new char [strlen(n)+1];
strcpy(naziv, n);
boja = b;
}
Cvet(const Cvet& cv) {
naziv = new char [strlen(cv.naziv)+1]; strcpy(naziv, cv.naziv);
boja = cv.boja;
}
~Cvet() { delete [] naziv; }
const char* dohvN() const { return naziv; }
Boja dohvB() const { return boja; }
bool ispred(const Cvet& cv2) const { return strcmp(naziv, cv2.naziv) < 0; }
void pisi () const { cout << naziv << '/'; boja.pisi(); }
};
class Cvecara {
char* naziv;
struct Elem {
Cvet cv;
Elem* sled;
Elem(const Cvet& c, Elem* s=0): cv(c) { sled = s; }
};
Elem* prvi;
public:
explicit Cvecara(const char* n) {
naziv = new char [strlen(n)+1];
strcpy(naziv, n);
prvi = 0;
}
Cvecara(const Cvecara& cvra);
~Cvecara();
Cvecara& stavi(const Cvet& cv);
void pisi(Boja b) const;
};
Cvecara::Cvecara(const Cvecara& cvra) {
naziv = new char [strlen(cvra.naziv)+1];
strcpy(naziv, cvra.naziv);
prvi = 0;
for (Elem *tek=cvra.prvi, *posl=0; tek; tek=tek->sled)
posl = (!prvi ? prvi : posl->sled) = new Elem(tek->cv);
}
Cvecara::~Cvecara() {
delete [] naziv;
while (prvi) { Elem* stari = prvi;
prvi = prvi->sled; delete stari;}
}
Cvecara& Cvecara::stavi(const Cvet& cv) {
Elem *tek = prvi, *preth = 0;
while (tek && tek->cv.ispred(cv)) { preth = tek; tek = tek->sled; }
Elem* novi = new Elem(cv, tek);
(!preth ? prvi : preth->sled) = novi;
return *this;
}
void Cvecara::pisi(Boja b) const {
for (Elem* tek=prvi; tek; tek=tek->sled)
if (iste(tek->cv.dohvB(), b)) {tek->cv.pisi(); cout << endl;}
}
int main() {
Cvecara s("Cvecara");
s.stavi(Cvet("lala", Boja(255,0,0)))
.stavi(Cvet("bozur", Boja(0,255,255)))
.stavi(Cvet("krin", Boja(255,0,0)))
.pisi(Boja(255,0,0));
return 0;
}
krin/(255,0,0)
lala/(255,0,0)
(⇒ почетак)
Copyright © 2012, Laslo Kraus
Последња ревизија: 24.11.2012.