Visa elektrotehnicka skola, Beograd
Ласло Краус
Објектно програмирање - испити
Практични испит
16. 2. 2002

Задатак | Напомене | Решење

Поставка задатка (садржај)

Пројектовати на језику C++ класу за грешке недозвољени индекс. Предвидети:

  1. ставарње објекта са задатом вредношћу недозволљеног индекса, и
  2. писање поруке о недозвољеном индексу (која садржи и вредност тог индекса) у неки излазни ток (dat<<g).

Ову класу треба користити за пријављивање одговарајућих изузетака у настаку.

Пројектовати на језику C++ класу за динамичке низове реалних бројева са задатим опсегом индекса. Предвидети:

  1. стварање низа са задатим опсегом (подразумевано од 1 до 10) и са свим елементима једнаким нули,
  2. иницијализацију низа садржајем другог низа,
  3. уништавање низа,
  4. доделу вредности једног низа другом низу (niz1=niz2),
  5. приступање задатом елементу низа (niz[ind]),
  6. дохватање дужине низа (унарни +), и
  7. дохватање најмањег и највећег индекса (две методе).

Пројектовати на језику C++ апстрактну класу за реалне функције са једним реалним аргументом. Предвидети:

  1. израчунавање вредности функције (f(x)), и
  2. уписивање текстуалне формуле представљене функције у неки излазни ток (dat<<f).

Пројектовати на језику C++ класу за полиноме као изведену класу из класе функција која садржи низ за смештање коефицијената. Поред могућности основне класе редвидети:

  1. стварање полинома задатог реда (подразумевано 3) са свим коефицијентима једнаким један, и
  2. приступање задатом коефицијенту полинома (p[ind]).

Исписивање формуле полинома подразумева исписивање низа коефицијената на пригодан начин. На пример, за полином 5x3-2x2+3 може да се испише: p[5,-2,0,3].

Саставити на језику C++ главни програм који:


Напомене (садржај)


Решење задатка (поставка | садржај)

// greske.h

#ifndef _greske_h_
#define _greske_h_
#include <iostream.h>

class GIndeks {
  int ind;
public:
  GIndeks (int i) { ind = i; }
  friend ostream &operator<< (ostream &d, const GIndeks &g)
    { return d << "*** Nedozvoljeni indeks: " << g.ind; }
};

class GOpseg {
  int min, max;
public:
  GOpseg (int mi, int ma) { min = mi; max = ma; }
  friend ostream &operator<< (ostream &d, const GOpseg &g)
    { return d << "*** Nedozvoljeni opseg: " << g.min << " - " << g.max; }
};

#endif


// niz.h #ifndef _niz_h_ #define _niz_h_ #include "greske.h" class Niz { double *a; int min, max, duz; void kopiraj (const Niz &n); void brisi () { delete a; a = 0; } public: Niz (int mi=1, int ma=10); ~Niz () { brisi (); } Niz & operator= (const Niz &n) { if (&n != this) { brisi (); kopiraj (n); } return *this; } double & operator[] (int i) const { if (i<min || i>max) throw GIndeks (i); return a[i-min]; } int operator+ () const { return duz; } int minInd () const { return min; } int maxInd () const { return max; } }; #endif
// niz.cpp #include "niz.h" Niz::Niz (int mi, int ma) { if ((max=ma)<(min=mi)) throw GOpseg (mi, ma); a = new double [duz=max-min+1]; for (int i=0; i<duz; a[i++]=0); } void Niz::kopiraj (const Niz &n) { a = new double [duz=n.duz]; min = n.min; max = n.max; for (int i=0; i<duz; i++) a[i] = n.a[i]; }
// funkcija.h #ifndef _funkcija_h_ #define _funkcija_h_ class Funkcija { public: virtual double operator() (double x) const =0; virtual ~Funkcija () {} protected: virtual void pisi (ostream &d) const =0; friend ostream & operator<< (ostream &d, const Funkcija &f) { f.pisi (d); return d;} }; #endif
// polinom.h #ifndef _polinom_h_ #define _polinom_h_ #include "niz.h" #include "funkcija.h" class Polinom: public Funkcija { Niz p; public: Polinom (int n=3): p(0,n) {} double operator() (double x) const; double & operator[] (int i) { return p[i]; } int operator+ () const { return p.maxInd (); } private: void pisi (ostream &d) const; }; #endif
// polinom.cpp #include "polinom.h" double Polinom::operator() (double x) const { double s = 0; for (int i=p.maxInd(); i>=0; (s*=x)+=p[i--]); return s; } void Polinom::pisi (ostream &d) const { d << "p["; for (int i=p.maxInd(); i>=0; i--) { d << p[i]; if (i > 0) d << ','; } d << ']'; }
// glavni.cpp #include "polinom.h" #include <iostream.h> int main () { int n; cout << "Red polinoma? "; cin >> n; Polinom p(n); try { while (1) { cout << "Indeks i vrednost koeficijenta? "; int i; double a; cin >> i >> a; p[i] = a; } } catch (GIndeks) {} cout << "Polinom= " << p << endl; double xmin, xmax, dx; cout << "xmin, xmax, dx? "; cin >> xmin >> xmax >> dx; cout << endl; for (double x=xmin; x<=xmax; x+=dx) cout << x << ' ' << p(x) << endl; return 0; }
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

Copyright © 2010, Laslo Kraus
Последња ревизија: 4.10.2010.