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

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

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

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

Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:

а) Навести разлику између појма декларације и дефиниције класе. Дати кратак пример декларације и дефиниције исте класе.

б) Да ли се може динамички створити (1) низ објеката (2) матрица објеката, тако што им се димензије одређују динамички?

в) Да ли је релација пријатељства између класа: (1) симетрична, (2) транзитивна, (3) наследна?

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

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

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


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


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

#include <iostream>
#include <cstring>
using namespace std;

class JMBG {
  char jmbg[14];
public:
  JMBG( const char j[]) { strcpy( jmbg, j); }
  const char* dohvJMBG() const { return jmbg; }
  bool veci(JMBG j) const { return strcmp(jmbg,j.jmbg)>0; }
  void pisi() const { cout << jmbg; }
};

class Osoba {
  char* ime;
  JMBG jmbg;
public:
  Osoba( const char* i, JMBG j): jmbg(j)
    { ime = new char [strlen(i)+1]; strcpy( ime, i); }
  Osoba( const Osoba& oso): jmbg(oso.jmbg)
    { ime=new char [strlen(oso.ime)+1]; strcpy( ime, oso.ime); }
  ~Osoba() { delete [] ime; }
  const char* dohvIme() const { return ime; }
  JMBG dohvJMGB() const { return jmbg; }
  void pisi() const
    { cout << ime << '('; jmbg.pisi(); cout << ')'; }
};

class Imenik {
  struct Elem {
    Osoba oso;
    Elem* sled;
    Elem( const Osoba& o, Elem* s=0): oso(o) { sled = s; }
  };
  Elem* prvi;
public:
  Imenik() { prvi=0; }
  Imenik( const Imenik& im);
  ~Imenik();
  Imenik& dodaj( const Osoba& oso);
  void pisi() const;
};

Imenik::Imenik( const Imenik& im) {
  prvi = 0;
  for (Elem *tek=im.prvi, *posl=0; tek; tek=tek->sled)
    posl= (!prvi ? prvi : posl->sled) = new Elem( tek->oso);
}

Imenik::~Imenik() {
  while (prvi) { Elem* stari = prvi; prvi = prvi->sled; delete stari; }
}

Imenik& Imenik::dodaj( const Osoba& oso) {
  Elem *tek=prvi, *pret=0;
  while (tek && oso.dohvJMGB(). veci(tek->oso.dohvJMGB()))
    { pret = tek; tek = tek->sled; }
  Elem* novi = new Elem( oso, tek);
  (!pret ? prvi : pret->sled) = novi;
  return *this;
}

void Imenik::pisi() const {
  for (Elem* tek=prvi; tek; tek=tek->sled)
    { tek->oso.pisi(); cout<<endl; }
}

int main() {
  Imenik im;
  im.dodaj( Osoba("Marko", JMBG("1205982110022")));
  im.dodaj( Osoba("Zoran", JMBG("1505980110022")));
  im.dodaj( Osoba("Petar", JMBG("1207980110022")));
  im.dodaj( Osoba("Stevo", JMBG("1205980110022")));
  im.dodaj( Osoba("Milan", JMBG("1208980110022")));
  im.pisi();
  return 0;
}

Stevo(1205980110022) Marko(1205982110022) Petar(1207980110022) Milan(1208980110022) Zoran(1505980110022)
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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