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

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

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

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

  1. иницијализацију празног реда задатог капацитета (подразумевано 5),
  2. иницијализацију реда другим редом,
  3. уништавање реда,
  4. додељивање вредности једног реда другом реду (red1=red2),
  5. дохватање броја података у реду (+red – није капацитет реда!),
  6. испитивање да ли ред пун и да ли је празан,
  7. стављање податка на крај реда (red+=b – стављање у пун ред прекида програм),
  8. узимање податка са почетка реда (--red – узимање из празног реда прекида програм),
  9. приступање задатом податку у реду (red[i] – први податак у реду има индекс 0 – недозвољени индекс прекида програм),
  10. писање реда у датотеку (dat<<red) у облику r[a0,a1,,an−1], где је n број података у реду (није капацитет реда!).

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


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


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

// red.h

#include <iostream>
#include <cstdlib>
using namespace std;

class Red {
  int *a, kap, duz, prvi, posl;
  void kopiraj (const Red& r);
  void brisi () { delete [] a; }
public:
  explicit Red (int k=5) {
    a = new int [kap = k];
    duz = prvi = posl = 0;
  }
  Red (const Red& r) { kopiraj (r); }
  ~Red () { brisi (); }
  Red& operator= (const Red& r) {
    if (this != &r) { brisi (); kopiraj (r); }
    return *this;
  }
  int operator+ () const { return duz; }
  bool pun () const { return duz == kap; }
  bool prazan () const { return duz == 0; }
  Red& operator+= (int b) {
    if (duz == kap) exit (1);
    a[posl++] = b; duz++;
    if (posl == kap) posl = 0;
    return *this;
  }
  int operator-- () {
    if (duz == 0) exit (2);
    int b = a[prvi++]; duz--;
    if (prvi == kap) prvi = 0;
    return b;
  }
  int& operator[] (int i) {
    if (i<0 || i>=duz) exit (3);
    return a[(prvi+i)%kap];
  }
  const int& operator[] (int i) const {
    if (i<0 || i>=duz) exit (3);
    return a[(prvi+i)%kap];
  }
  friend ostream& operator<< (ostream& d, const Red& r);
};

// red.cpp #include "red.h" void Red::kopiraj (const Red& r) { a = new int [kap = r.kap]; for (int i=0; i<kap; i++) a[i] = r.a[i]; duz = r.duz; prvi = r.prvi; posl = r.posl; } ostream& operator<< (ostream& d, const Red& r) { d << "r["; for (int i=0; i<r.duz; i++) { if (i) d << ','; d << r.a[(r.prvi+i)%r.kap]; } return d << ']'; }
// redt.cpp #include "red.h" #include <iostream> int main () { while (true) { cout << "k? "; int k; cin >> k; if (k < 3) break; Red r (k); for (int i=0; i<k-2; i++) { cout << "Dva broja? "; int a, b; cin >> a >> b; (r += a) += b; cout << "Uzeto= " << --r << endl; } cout << "Red= " << r << endl; } return 0; }
k? 6 Dva broja? 1 2 Uzeto= 1 Dva broja? 3 4 Uzeto= 2 Dva broja? 5 6 Uzeto= 3 Dva broja? 7 8 Uzeto= 4 Red= r[5,6,7,8] k? 0
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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