Elektrotehnicki fakultet, Beograd  Ласло Краус СИ2ОО1
Први колоквијум
23. 10. 2012.

Аутори: Игор Тартаља и Ласло Краус

Задаци: 1 2 | Напоменe | Решења: 2

Поставка задатка 1 (30 поена) ( почетак)

Одговорити концизно (по једна или две реченице) и прецизно на следећа пит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];}

Поставка задатка 2 (укупно 70 поена) ( решење | почетак)

Написати на језику C++ следеће класе (класе опремити оним конструкторима и деструктором који су потребни за безбедно коришћење класа):

(10 поена) Написати на језику C++ програм који направи једну цвећару, дода неколико цветова и испише на главном излазу цветове одабране боје. Користити фиксне параметре – није потребно ништа учитавати с главног улаза.


Напоменe ( почетак)


Решење задатка 2 ( поставка | почетак)

#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)
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

Copyright © 2012, Laslo Kraus
Последња ревизија: 24.11.2012.