Ласло Краус |
СИ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.