Visa elektrotehnicka skola, Beograd
Ласло Краус
Објектно програмирање - колоквијуми
Други колоквијум
Прва група
9. 6. 2004.

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

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

I - Пројектовати на језику C++ класу Niz за низове реланих бројева. Предвидети:

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

Грешке пријављивати изузецима помоћу објектака типа једноставних класа.

II - Пројектовати на језику C++ класу UNiz за уређене низове реалних бројева као изведену класу из класе Niz са истим могућностима као и основна класа.

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


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


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

// 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; }
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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