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