![]() Ласло Краус |
Објектно програмирање - колоквијуми Први колоквијум Друга група 24. 4. 2005. |
|---|
Пројектовати на језику C++ класу за редове целих бројева са ограниченим капацитетима. Предвидети:
red1=red2),
+red – није капацитет реда!),
red+=b – стављање у пун ред прекида програм),
--red – узимање из празног реда прекида програм),
red[i] – први податак у реду има индекс 0 – недозвољени индекс прекида програм),
dat<<red) у облику r[a0,a1,…,an−1], где је n број података у реду (није капацитет реда!).
Саставити на језику C++ главни програм који:
studentx (x је број радне станице за којим се ради). Лозинка на свакој радној станици је student.N: (Nastava on \\Xs200-2) у каталогу ObjektnoProg\RSx (x је број радне станице за којим се ради).
// 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
(садржај)
Copyright © 2010, Laslo Kraus
Последња ревизија: 4.10.2010.