![]() Ласло Краус |
Објектно програмирање 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.