![]() Ласло Краус |
Објектно програмирање - колоквијуми Други колоквијум Прва група 9. 6. 2004. |
---|
I - Пројектовати на језику C++ класу Niz
за низове реланих бројева. Предвидети:
niz1=niz2
),
+niz
),
niz+=br
) - препуњавање низа је грешка,
niz[ind]
) - приступ непостојећем елементу је грешка,
niz(ind,br)
) - приступ непостојећем елементу је грешка,
d<<niz
).
Грешке пријављивати изузецима помоћу објектака типа једноставних класа.
II - Пројектовати на језику C++ класу UNiz
за уређене низове реалних бројева као изведену класу из класе Niz
са истим могућностима као и основна класа.
III - Саставити на језику C++ главни програм који:
studentx
(x
је број радне станице за којим се ради). Лозинка на свакој радној станици је student
.N:
(Nastava
on
\\Xs200-2
) у каталогу ObjektnoProg\RSx
(x
је број радне станице за којим се ради).// niz.h - Klasa nizova realnih brojeva. #ifndef _niz_h_ #define _niz_h_ #include <iostream> using namespace std; class GIndeks {}; class GPun {}; class Niz { void kopiraj (const Niz& z); void brisi () { delete [] a; a = 0; } protected: double *a; int n, k; public: explicit Niz (int kk=10) { if (kk <=0) kk = 5; a = new double [k=kk]; n = 0; } Niz (const Niz& z) { kopiraj (z); } virtual ~Niz () { brisi (); } Niz& operator= (const Niz& z) { if (this != &z) { brisi (); kopiraj (z); } return *this; } int operator+ () const { return n; } virtual Niz& operator+= (int b) { if (n == k) throw GPun (); a[n++] = b; return *this; } double operator[] (int ind) const { if (ind<0 || ind>=n) throw GIndeks(); return a[ind]; } virtual Niz& operator() (int ind, double b) { if (ind<0 || ind>=n) throw GIndeks(); a[ind] = b; return *this; } protected: virtual void pisi (ostream& d) const; friend ostream& operator<< (ostream& d, const Niz& z) { z.pisi (d); return d; } }; #endif // niz.cpp - Klasa nizova realnih brojeva. #include "niz.h" void Niz::kopiraj (const Niz& z) { a = new double [k=z.k]; n = z.n; for (int i=0; i<n; i++) a[i] = z.a[i]; } void Niz::pisi (ostream& d) const { for (int i=0; i<n; i++) { if (i) d << ' '; d << a[i]; } }(садржај)
// uniz.h - Klasa uredjenih nizova realnih brojeva. #ifndef _uniz_h_ #define _uniz_h_ #include "niz.h" class UNiz: public Niz { public: explicit UNiz (int kk=10): Niz (kk) {} UNiz& operator+= (int b); UNiz& operator() (int ind, double b); }; #endif
// uniz.h - Klasa uredjenih nizova realnih brojeva. #include "uniz.h" UNiz& UNiz::operator+= (int b) { if (n == k) throw GPun (); int i; for (i=n; i>0 && a[i-1]>b; i--) a[i] = a[i-1]; a[i] = b; n++; return *this; } UNiz& UNiz::operator() (int ind, double b) { if (ind<0 || ind>=n) throw GIndeks (); int i; for (i=ind; i<n-1 && b>a[i]; i++) a[i] = a[i+1]; for (; i>0&&b<a[i]; i--) a[i] = a[i-1]; a[i] = b; return *this; }
// nizt.cpp - Ispitivanje klasa nizova realnih brojeva. #include "niz.h" #include "uniz.h" #include <iostream> using namespace std; int main () { Niz z; UNiz u; try { while (true) { cout << "b? "; double b; cin >> b; z += b; u += b; } } catch (GPun) {} cout << "z= " << z << endl; cout << "u= " << u << endl; try { while (true) { cout << "i,b? "; int i; double b; cin >> i >> b; z (i, z[i]+b); u (i, u[i]+b); } } catch (GIndeks) {} cout << "z= " << z << endl; cout << "u= " << u << endl; return 0; }
Copyright © 2010, Laslo Kraus
Последња ревизија: 4.10.2010.