![]() Ласло Краус |
Објектно програмирање - колоквијуми Други колоквијум Прва група 14. 6. 2005. |
---|
I – Пројектовати на језику C++ апстрактну класу Zbirka
за низове реланих бројева. Предвидети:
zbirka1=zbirka2
),
+zbirka
, -zbirka
),
dat<<zbirka
– пише се једнословна ознака збирке и елементи збирке).
II – Пројектовати на језику C++ класу Niz
за уређене низове реалних бројева као изведену класу из класе Zbirka
са истим могућностима као и основна класа.
III – Пројектовати на језику C++ класу Skup
за скупове реалних бројева, чији су сви елементи међусобно различити, као изведену класу из класе Zbirka
, код којих се бројеви додају иза последњег броја у скупу. Поред могућности основне класе, предвидети:
IV – Саставити на језику C++ главни програм који:
Грешке пријављивати изузецима типа једноставних класа. Предвидети исписивање поруке о грешци.
studentx
(x
је број радне станице за којим се ради). Лозинка на свакој радној станици је student
.N:
(Nastava
on
\\Xs200-2
) у каталогу ObjektnoProg\RSx
(x
је број радне станице за којим се ради).// zbirka.h #ifndef _zbirka_h_ #define _zbirka_h_ #include <iostream> using namespace std; class Zbirka { protected: double* niz; int kap, duz; private: void kopiraj (const Zbirka& z); void brisi () { delete [] niz; } public: explicit Zbirka (int k=10) { niz = new double [kap = k]; duz = 0; } Zbirka (const Zbirka& z) { kopiraj (z); } virtual ~Zbirka () { brisi (); } Zbirka& operator= (const Zbirka& z) { if (this != &z) { brisi (); kopiraj (z); } return *this; } virtual char vrsta () const =0; virtual Zbirka* kopija () const =0; int operator+ () const { return duz; } int operator- () const { return kap - duz; } virtual Zbirka& stavi (double b) =0; protected: virtual void pisi (ostream& d) const; friend ostream& operator<< (ostream& d, const Zbirka& z) { z.pisi (d); return d; } }; class GZbirkaPuna { friend ostream& operator<< (ostream& d, const GZbirkaPuna& g) { return d << "*** Zbirka je puna!"; } }; #endif(садржај)
// zbirka.cpp #include "zbirka.h" void Zbirka::kopiraj (const Zbirka& z) { niz = new double [kap = z.kap]; duz = z.duz; for (int i=0; i<kap; i++) niz[i] = z.niz[i]; } void Zbirka::pisi (ostream& d) const { d << vrsta () << ':'; for (int i=0; i<duz; d << ' ' << niz[i++]); }
// niz.h #ifndef _niz_h_ #define _niz_h_ #include "zbirka.h" class Niz: public Zbirka { public: explicit Niz (int k): Zbirka (k) {} char vrsta () const { return 'N'; } Niz* kopija () const { return new Niz (*this); } Niz& stavi (double b); }; #endif
// niz.cpp #include "niz.h" Niz& Niz::stavi (double b) { if (duz == kap) throw GZbirkaPuna (); int i = duz-1; while (i>=0 && niz[i]>b) { niz[i+1] = niz[i]; i--; } niz[i+1] = b; duz++; return *this; }
// skup.h #ifndef _skup_h_ #define _skup_h_ #include "zbirka.h" class Skup: public Zbirka { public: explicit Skup (int k): Zbirka (k) {} char vrsta () const { return 'S'; } Skup* kopija () const { return new Skup (*this); } Skup& stavi (double b); bool ima (double b) const; }; #endif
// skup.cpp #include "skup.h" Skup& Skup::stavi (double b){ if (!ima (b)) { if (duz == kap) throw GZbirkaPuna (); niz [duz++] = b; } return *this; } bool Skup::ima (double b) const { for (int i=0; i<duz; i++) if (niz[i] == b) return true; return false; }
// glavni.cpp #include "niz.h" #include "skup.h" #include <iostream> using namespace std; int main () { while (true) { cout << "Broj zbirki? "; int n; cin >> n; if (n <= 0) break; Zbirka** niz = new Zbirka* [n]; for (int i=0; i<n; ) { cout << "Vrsta zbirke (N, S)? "; char vrs; cin >> vrs; cout << "Kapacitet zbirke? "; int k; cin >> k; switch (vrs) { case 'N': niz[i++] = new Niz (k); break; case 'S': niz[i++] = new Skup (k); break; } } try { while (true) { cout << "Broj? "; double b; cin >> b; for (int i=0; i<n; niz[i++]->stavi(b)); } } catch (GZbirkaPuna) {} int min = +*niz[0], max=min, imin=0, imax=0; for (int i=1; i<n; i++) { int d = +*niz[i]; if (d < min) { min = d; imin = i; } if (d > max) { max = d; imax = i; } } cout << "min = " << *niz[imin] << endl; cout << "max = " << *niz[imax] << endl; for (int i=0; i<n; delete niz[i++]); delete [] niz; } return 0; }
Broj zbirki? 4 Vrsta zbirke (N, S)? N Kapacitet zbirke? 6 Vrsta zbirke (N, S)? S Kapacitet zbirke? 3 Vrsta zbirke (N, S)? N Kapacitet zbirke? 4 Vrsta zbirke (N, S)? S Kapacitet zbirke? 6 Broj? 5 Broj? 3 Broj? 4 Broj? 3 Broj? 2 min = S: 5 3 4 max = N: 2 3 3 4 5 Broj zbirki? 0
Copyright © 2010, Laslo Kraus
Последња ревизија: 4.10.2010.