![]() Ласло Краус |
Објектно програмирање - испити Практични испит 30. 1. 2001 |
---|
dat<<g
). Порука треба да садржи и вредности границе опсега, односно индекса које су недозвољене. Ове класе треба користити за пријављивање одговарајућих изузетака у настаку.Пројектовати на језику C++ класу за низове реалних бројева са задатим опсезима индекса. Предвидети:
niz1=niz2
),
niz[ind]
), и
v(x)
).Саставити на језику C++ главни програм који:
// 200101.h
#include <iostream.h>
class Greska {
protected:
virtual ~Greska () {}
virtual void pisi (ostream &d) const =0;
friend ostream & operator<< (ostream &d, const Greska &g)
{ g.pisi (d); return d; }
};
class GOpseg: public Greska {
int min, max;
void pisi (ostream &d) const {
d << "\n*** Nedozvoljen opseg indeksa ["
<< min << ',' << max << "] ***\n\n";
}
public:
GOpseg (int poc, int kra) { min = poc, max = kra; }
};
class GIndeks: public Greska {
int ind;
void pisi (ostream &d) const {
d << "\n*** Nedozvoljen indeks [" << ind << "] ***\n\n";
}
public:
GIndeks (int i) { ind = i; }
};
class Niz {
double *niz; int min, max;
void pravi (int poc, int kra);
void kopiraj (const Niz &n);
void brisi () { delete [] niz; }
public:
Niz (int kra=10) { pravi (1, 10); }
Niz (int poc, int kra) { pravi (poc, kra); }
Niz (const Niz &n) { kopiraj (n); }
virtual ~Niz () { brisi (); }
Niz & operator= (const Niz &n) {
if (this != &n) { brisi (); kopiraj (n); }
return *this;
}
double & operator[] (int ind) const {
if (ind < min || ind > max) throw GIndeks (ind);
return niz[ind-min];
}
int minInd() const { return min; }
int maxInd() const { return max; }
};
class VerizniRazlomak: public Niz {
public:
VerizniRazlomak (int m, int n): Niz(m,n) {}
double operator() (double x) const;
};
// 200101.cpp
#include "200101.h"
void Niz::pravi (int poc, int kra) {
if (poc > kra) throw GOpseg (poc, kra);
int d = (max = kra) - (min = poc) + 1;
niz = new double [d];
for (int i=0; i<d; niz[i++]=0);
}
void Niz::kopiraj (const Niz &n) {
int d = n.min - n.max + 1;
niz = new double [d];
for (int i=0; i<d; i++) niz[i] = n.niz[i];
}
double VerizniRazlomak::operator() (double x) const {
double v = 0;
for (int i=maxInd(); i>=minInd(); i--)
v = (*this)[i] / (x + v);
return v;
}
// 200101t.cpp
#include "200101.h"
#include <iostream.h>
int main () {
try {
cout << "Pocetni i krajnji indeks? ";
int min, max; cin >> min >> max;
VerizniRazlomak v (min, max);
char odg = 'd';
do {
try {
cout << "Indeks i vrednost koeficijenta? ";
int i; double a; cin >> i >> a; v[i] = a;
cout << "Jos (D/N)? "; cin >> odg;
} catch (GIndeks g) { cout << g; }
} while (odg != 'n' && odg != 'N');
cout << "minX, maxX, dX? ";
double minX, maxX, dX; cin >> minX >> maxX >> dX;
for (double x=minX; x<=maxX; x+=dX)
cout << x << ' ' << v(x) << endl;
} catch (GOpseg g) { cout << g; }
return 0;
}
(садржај)
Copyright © 2010, Laslo Kraus
Последња ревизија: 4.10.2010.