![]() Ласло Краус |
Објектно програмирање - испити Практични испит 13. 5. 1999 |
---|
Tacka2
). Предвидети:
double
са
подразумеваним вредностима једнаким нули,
+
),
+=
)
што представља померање тачке за помак који представља друга
тачка,
>>
), и
<<
).
Tacka3
) као
изведену класу из класе тачака у равни. Поред могућности те класе
предвидети још и иницијализацију тачке у простору тачком у равни са
трећом координатом једнаком нули.
Пројектовати класу на језику C++ за неуређене листе тачака
(NLista
). Предвидети:
=
),
+=
), и
<<
).
ULista
) на основу одстојања од координатног почетка као
изведену класу из класе за неуређене листе. Предвидети исте могућности
које има и основна класа.Саставити главни програм на језику C++ који:
N
=неуређена,
U
=уређена),
2
=у равни, 3
=у
простору) и координате тачке преко главног улаза и ставља у листу,
G
(=готово),
G
(=готово).
// 990513.h
#ifndef __990513__h__
#define __990513__h__
#include <iostream.h>
#include <math.h>
class Tacka2 {
protected:
double x, y;
public:
Tacka2 (double xx=0, double yy=0) { x = xx; y = yy; }
~Tacka2() {}
virtual Tacka2 *kopija () const { return new Tacka2 (*this); }
virtual double operator+ () const { return sqrt (x*x + y*y); }
virtual Tacka2 & operator+= (const Tacka2 &t2)
{ x += t2.x; y += t2.y; return *this; }
protected:
virtual void citaj (istream &dd) { dd >> x >> y; }
virtual void pisi (ostream &dd) const
{ dd << '(' << x << ',' << y << ')'; }
friend istream & operator>> (istream &dd, Tacka2 &tt)
{ tt.citaj (dd); return dd; }
friend ostream & operator<< (ostream &dd, const Tacka2 &tt)
{ tt.pisi (dd); return dd; }
};
class Tacka3: public Tacka2 {
double z;
public:
Tacka3 (double xx=0, double yy=0, double zz=0): Tacka2 (xx,yy) { z = zz; }
Tacka3 (const Tacka2 &t2): Tacka2 (t2) { z = 0; }
Tacka2 *kopija () const { return new Tacka3 (*this); }
double operator+ () const { return sqrt (x*x + y*y + z*z); }
Tacka3 & operator+=(const Tacka2 &t3) {
const Tacka3 &tt3 = (const Tacka3 &) t3;
x += tt3.x; y += tt3.y; z += tt3.z; return *this;
}
private:
void citaj (istream &dd) { Tacka2::citaj (dd); dd >> z; }
void pisi (ostream &dd) const
{ dd << '(' << x << ',' << y << ',' << z << ')'; }
};
class NLista {
protected:
struct Elem { Tacka2 *obj; Elem *sled;
Elem (const Tacka2 &t2, Elem *ss=0)
{ obj=t2.kopija(); sled=ss; }
~Elem () { delete obj; }
};
Elem *prvi;
void kopiraj (const NLista &nl);
void brisi ();
public:
NLista () { prvi = 0; }
NLista (const Tacka2 &t2) { prvi = new Elem (t2); }
NLista (const NLista &nl) {kopiraj(nl);}
~NLista () { brisi (); }
virtual NLista & operator= (const NLista &nl) {
if (this != &nl) { brisi (); kopiraj (nl); }
return *this;
}
virtual NLista & operator+= (const Tacka2 &t2) {
prvi = new Elem (t2, prvi);
return *this;
}
friend ostream & operator<< (ostream &dd, const NLista &nl);
};
class ULista: public NLista {
public:
ULista (): NLista () {}
ULista (const ULista &ul): NLista (ul) {}
ULista & operator+= (const Tacka2 &t2);
};
#endif
// 990513.cpp
#include "990513.h"
void NLista::kopiraj (const NLista &nl) {
Elem* posl = prvi = 0;
for (Elem *tek=nl.prvi; tek; tek=tek->sled)
posl = (posl ? posl->sled : prvi) = new Elem (*(tek->obj));
}
void NLista::brisi () {
while (prvi) { Elem *stari = prvi; prvi = prvi->sled; delete stari; }
}
ostream & operator<< (ostream &dd, const NLista &nl) {
dd << '[';
for (NLista::Elem *tek=nl.prvi; tek; tek=tek->sled) {
dd << *(tek->obj);
if (tek->sled) dd << ',';
}
return dd << ']';
}
ULista & ULista::operator+= (const Tacka2 &t2) {
for (Elem *tek=prvi, *preth=0; tek && +*tek->obj<+t2;
preth=tek, tek=tek->sled);
(preth ? preth->sled : prvi) = new Elem (t2, tek);
return *this;
}
// 990513t.cpp
#include "990513.h"
#include <iostream.h>
void main () {
for (int dalje=1; dalje;) {
try {
cout<< "Vrsta liste (Neuredjena, Uredjena, Gotovo)? ";
char izb; cin >> izb; NLista *lista=0;
switch (izb) {
case 'N': case 'n': lista = new NLista; break;
case 'U': case 'u': lista = new ULista; break;
case 'G': case 'g': dalje = 0; break;
default: throw 1;
}
if (dalje) {
for (int jos=1; jos;) {
try {
cout << "Vrsta tacke (2-dim, 3-dim, Gotovo)? ";
char izb; cin >> izb; Tacka2 *tacka=0;
switch (izb) {
case '2': tacka = new Tacka2; break;
case '3': tacka = new Tacka3; break;
case 'G': case 'g': jos = 0; break;
default: throw 1;
}
if (jos) {
cout << "Koordinate tacke? "; cin >> *tacka;
*lista += *tacka; delete tacka;
}
} catch (int) {
cout << "*** Neispravna vrsta tacaka ***\n";
}
}
cout << "Procitano: " << *lista << endl;
delete lista;
}
} catch (int) {
cout << "*** Neispravan izbor ***\n";
}
}
}
(садржај)
Copyright © 2010, Laslo Kraus
Последња ревизија: 4.10.2010.