![]() Ласло Краус |
Објектно програмирање 1 - колоквијуми Први колоквијум 27. 4. 2014. |
---|
Одредница у речнику садржи појам и превод појма (ниске произвољне дужине). Написати на језику C++ класу за одреднице. Предвидети:
odr1=odr2
);
odr==pojam
)
odr1<odr2
– (a,b)<(c,d) ако a<c ∨ (a=c ∧ b<d) ); и
it<<odr
) у облику појам:
превод.
Речник садржи листу одредница. Написати на језику C++ класу за речнике. Предвидети:
recnik1=recnik2
);
recnik+=odr
);
recnik<<pojam
); и
it<<recnik
), једна одредница у сваки ред.
Написати на језику C++ програм који направи један речник, додаје неколико одредница, испише речник на главном излазу и испише на главном излазу све преводе задатог појма. Користити константне параметре (не треба ништа учитавати с главног улаза).
ispitx
(x
је број радне станице за којим се ради). Лозинка на свакој радној станици је student
.Z:
.
// odred.h #include <cstring> #include <iostream> using namespace std; class Odred { char *poj, *prev; void kopiraj(const char*po, const char* pr) { poj = new char [strlen(po)+1]; strcpy(poj, po); prev = new char [strlen(pr)+1]; strcpy(prev, pr); } void brisi() { delete [] poj; delete [] prev; } public: Odred(const char* poj, const char* prev) { kopiraj(poj, prev); } Odred(const Odred& odr) { kopiraj(odr.poj, odr.prev); } Odred& operator=(const Odred& odr) { if (this != &odr) { kopiraj(poj,prev); } return *this; } ~Odred() { brisi(); } bool operator==(const char* po) const { return strcmp(po, poj) == 0; } friend bool operator<(const Odred& odr1, const Odred& odr2) { return strcmp(odr1.poj, odr2.poj) < 0 || strcmp(odr1.poj, odr2.poj) == 0 && strcmp(odr1.prev, odr2.prev) < 0; } friend ostream& operator<<(ostream& it, const Odred& odr) { return it << odr.poj << ":" << odr.prev; } };(садржај)
// recnik.h #include "odred.h" #include <iostream> using namespace std; class Recnik { struct Elem { Odred odr; Elem* sled; Elem(const Odred& od,Elem* s=0):odr(od){ sled = s; } }; Elem* prvi; void kopiraj(const Recnik& rec); void brisi(); public: Recnik() { prvi = 0; } Recnik(const Recnik& rec) {kopiraj(rec);} ~Recnik() { brisi(); } Recnik& operator=(const Recnik& rec) { if (this != &rec) { brisi(); kopiraj(rec); } return *this; } Recnik& operator+=(const Odred& odr); Recnik operator<<(const char* poj); friend ostream& operator<<(ostream& it, const Recnik& rec); };
// recnik.cpp #include "recnik.h" void Recnik::kopiraj(const Recnik& rec) { prvi = 0; for (Elem *tek=rec.prvi, *posl=0; tek; tek=tek->sled) posl = (!prvi ? prvi : posl->sled) = new Elem(tek->odr); } void Recnik::brisi() { while (prvi) { Elem* stari = prvi; prvi = prvi->sled; delete stari; } } Recnik& Recnik::operator+=(const Odred& odr) { Elem *tek = prvi, *pret = 0; while (tek && tek->odr<odr) { pret = tek; tek = tek->sled; } (!pret ? prvi : pret->sled) = new Elem(odr, tek); return *this; } Recnik Recnik::operator<<(const char* poj) { Recnik rec; for (Elem* tek=prvi; tek; tek=tek->sled) if (tek->odr == poj) rec += tek->odr; return rec; } ostream& operator<<(ostream& it, const Recnik& rec) { for (Recnik::Elem* tek=rec.prvi; tek; tek=tek->sled) it << tek->odr <<endl; return it; }
// program.cpp #include "recnik.h" #include <iostream> using namespace std; int main() { Recnik rec; rec += Odred("gotov", "ready"); rec += Odred("jezik", "speech"); rec += Odred("dobar", "kind"); rec += Odred("jezik", "tongue"); rec += Odred("dobar", "good"); rec += Odred("gotov", "comppleted"); rec += Odred("jezik", "language"); rec += Odred("gotov", "finished"); cout << rec << endl; cout << (rec << "gotov") << endl; }
dobar:good dobar:kind gotov:comppleted gotov:finished gotov:ready jezik:language jezik:speech jezik:tongue gotov:comppleted gotov:finished gotov:ready
Copyright © 2014, Laslo Kraus
Последња ревизија: 15.6.2014.