![]() Ласло Краус |
Објектно програмирање 1 - колоквијуми Први колоквијум 12. 4. 2009. |
|---|
Карта за представу садржи број реда, број седишта у реду и цену (реалан број). Написати на језику C++ класу за карте. Предвидети:
it<<karta) у облику "(ред,седиште,цена)".
Представа има наслов, датум (дугачак цео број по шеми ggggmmdd), број редова у сали, дужину редова (сваки ред има исти број седишта) и матрицу показивача на продате карте. Написати на језику C++ класу за представе. Предвидети:
predstava1=predstava2),
predstava+=karta; вредност функције је индикатор успеха; грешка је ако су број реда или седишта у карти изван опсега, односно као се карта односи на већ попуњено место),
it<<predstava; пише се матрчни приказ слободних ('_') и заузетих ('#') места).
Написати на језику C++ програм који направи једну представу, додаје неколико продатих карата, испише на главном излазу представу и вредност свих продатих карата. Користити константне параметре (не треба ништа учитавати с главног улаза).
ispitx (x је број радне станице за којим се ради). Лозинка на свакој радној станици је student.I: (Nastava on \\Xs200-2).
// karta.h
#include <iostream>
using namespace std;
class Karta {
int red, sed; float cena;
public:
Karta (int r, int s, float c) { red = r; sed = s; cena = c; }
int dohvRed () const { return red; }
int dohvSed () const { return sed; }
float dohvCena() const { return cena; }
friend ostream& operator<< (ostream& it, const Karta& k) {
return it << '(' << k.red << ',' << k.sed << ',' << k.cena << ')'; }
};
// predstava.h
#include "karta.h"
#include <iostream>
using namespace std;
class Predstava {
char* naslov; long datum;
int brRed, duzRed; Karta*** karte;
void kopiraj (const Predstava& p);
void brisi ();
public:
Predstava (const char* nas, long dat, int brR, int duzR);
Predstava (const Predstava& p) { kopiraj (p); }
~Predstava () { brisi (); }
Predstava& operator= (const Predstava& p) {
if (this != &p) { brisi (); kopiraj (p); }
return *this;
}
const char* dohvNaslov () const { return naslov; }
long dohvDatum () const {return datum;}
int dohvBrRed () const {return brRed;}
int dohvDuzRed() const {return duzRed;}
bool operator+= (const Karta& k);
float vrednost () const;
friend ostream& operator<< (ostream& it, const Predstava& p);
};
// predstava.cpp
#include "predstava.h"
void Predstava::kopiraj (const Predstava& p) {
naslov = new char [strlen(p.naslov)+1];
naslov = strcpy (naslov, p.naslov);
datum = p.datum; brRed = p.brRed;
duzRed = p.duzRed;
karte = new Karta** [brRed];
for (int i=0; i<brRed; i++) {
karte[i] = new Karta* [duzRed];
for (int j=0; j<duzRed; j++)
karte[i][j] = p.karte[i][j] ? new Karta (*p.karte[i][j]) : 0;
}
}
void Predstava::brisi () {
delete [] naslov;
for (int i=0; i<brRed; i++) {
for (int j=0; j<duzRed; delete karte[i][j++]);
delete [] karte[i];
}
delete [] karte;
}
Predstava::Predstava (const char* nas, long dat, int brR, int duzR) {
naslov = new char [strlen(nas)+1];
strcpy (naslov, nas);
datum = dat; brRed = brR;
duzRed = duzR;
karte = new Karta** [brRed];
for (int i=0; i<brRed; i++) {
karte[i] = new Karta* [duzRed];
for (int j=0; j<duzRed; karte[i][j++]=0);
}
}
bool Predstava::operator+= (const Karta& k) {
int red = k.dohvRed(), sed = k.dohvSed();
if (red<0 || red>=brRed || sed<0 || sed>=duzRed || karte[red][sed]) return false;
karte[red][sed] = new Karta (k);
return true;
}
float Predstava::vrednost () const {
float v = 0;
for (int i=0; i<brRed; i++)
for (int j=0; j<duzRed; j++)
if (karte[i][j]) v += karte[i][j]->dohvCena ();
return v;
}
ostream& operator<< (ostream& it, const Predstava& p) {
for (int i=0; i<p.brRed; i++) {
for (int j=0; j<p.duzRed; j++)
it << (p.karte[i][j] ? '#' : '_') << ' ';
it << endl;
}
return it;
}
// test.cpp
#include "predstava.h"
#include <iostream>
using namespace std;
int main () {
Predstava p ("Naslov", 20090308, 4, 6);
p += Karta (0, 3, 800);
p += Karta (3, 5, 200);
p += Karta (2, 1, 500);
cout << p <<endl<< p.vrednost() <<endl;
return 0;
}
_ _ _ # _ _
_ _ _ _ _ _
_ # _ _ _ _
_ _ _ _ _ #
1500
(садржај)
Copyright © 2010, Laslo Kraus
Последња ревизија: 4.10.2010.