Ласло Краус |
ПЈМП Први парцијални испит 8. 3. 2001. |
|---|
Пројектовати на језику C++ систем класа са следећим описом:
=), да се приступи елементу са задатим индексом ([]) и да се дохвати дужина низа (унарни +). У случају недозвољеног индекса, пријављује се изузетак целобројног типа са вредношћу једнаком том недозвољеном индексу.
()) и уписивање симболичког облика те функције (на пример формулу) у неки излазни ток (<<).
VRazl[a0,a1,...,an-1]. У случају покушаја дељења нулом, пријављује се изузетак целобројног типа са вредношћу нула.
X:
а) Шта се постиже дефиницијом класе class X {
X() {};
public:
static X* c() { return new X;}
};X на горњи начин?
б) Написати пример креирања објекта класе X у функцији main().
// klase.h - Definicije klasa.
#include <iostream.h>
class Niz {
protected:
double *a; int n;
private:
void kopiraj (const Niz &niz);
public:
Niz (int k=10) { a = new double[n=k]; }
Niz (const Niz &niz) { kopiraj (niz); }
~Niz () { delete [] a; }
Niz & operator= (const Niz &niz) {
if (this != &niz) { delete [] a; kopiraj (niz); }
return *this;
}
double & operator[] (int i) const {
if (i<0 || i>=n) throw i;
return a[i];
}
int operator+ () const { return n; }
};
class Fun {
virtual void pisi (ostream &d) const=0;
public:
virtual double operator() (double x) const =0;
friend ostream & operator<< (ostream &d, const Fun &f)
{ f.pisi (d); return d; }
};
class VRazlomak: public Niz, public Fun {
virtual void pisi (ostream &d) const;
public:
VRazlomak (int n);
double operator() (double x) const;
};
// klase.cpp - Definicije metoda klasa.
#include "klase.h"
void Niz::kopiraj (const Niz &niz) {
a = new double [n=niz.n];
for (int i=0; i<n; i++) a[i] = niz.a[i];
}
VRazlomak::VRazlomak (int n): Niz (n) {
for (int i=0; i<n; i++) a[i] = i+1;
}
void VRazlomak::pisi (ostream &d) const {
d << "VRazl[";
for (int i=0; i<n; i++) {
d << a[i]; if (i < n-1) cout << ',';
}
d << ']';
}
double VRazlomak::operator() (double x) const {
double s=0;
for (int i=n-1; i>=0; i--) {
if (x + s == 0) throw 0;
s=a[i]/(x+s);
}
return s;
}
// glavni.cpp - Glavni program.
#include "klase.h"
#include <iostream.h>
int main () {
cout << "n? "; int n; cin >> n;
VRazlomak v (n);
try {
while (1) {
cout << "i, a[i]? "; int i; cin >> i; cin >> v[i];
}
} catch (int) {}
cout << v << endl;
cout << "xmin, xmax, dx? "; double xmin, xmax, dx; cin >> xmin >> xmax >> dx;
for (double x=xmin; x<=xmax; x+=dx) {
cout << x << ' ';
try { cout << v(x) << endl; }
catch (int) { cout << "Ne moze!\n"; }
}
return 0;
}
(⇒ почетак)
Copyright © 2001, Laslo Kraus
Последња ревизија: 15.7.2001.