![]() Ласло Краус |
Објектно програмирање - колоквијуми Први колоквијум Друга група 22. 4. 2007. |
---|
Многоугао у равни се задаје низом тачака (xi,yi) које чине темена многоугла. Написати на језику C++ класу за многоуглове у равни (тачке представљати структуром са два реална поља). Предвидети:
mu1=mu2
),
mu[i]
– недозвољен индекс прекида програм),
mu1==mu2
, mu1<mu2
),
ut>>mu
– чита се број темена и низ тачака),
it<<mu
) у облику mu[(
x0,
y0);(
x1,
y1);…;(
xn−1,
yn−1)]
.
Написати на језику C++ главни програм који:
ispitx
(x
је број радне станице за којим се ради). Лозинка на свакој радној станици је student
.N:
(Nastava
on
\\Xs200-2
) у каталогу ObjektnoProg\RSx
(x
је број радне станице за којим се ради).// mugao.h #include <iostream> #include <cmath> using namespace std; class MUgao { struct Tacka { double x, y; Tacka (double a=0, double b=0) { x = a; y = b; } }; static double rast(Tacka t1, Tacka t2){ return sqrt (pow (t1.x-t2.x, 2) + pow (t1.y-t2.y, 2)); } Tacka* niz; int n; void kopiraj (const MUgao& mu); void brisi () { delete [] niz; niz = 0; n = 0; } public: explicit MUgao (int nn=3); MUgao (const MUgao& mu){ kopiraj(mu); } ~MUgao () { brisi (); } MUgao& operator= (const MUgao& mu) { if (this != &mu) { brisi (); kopiraj (mu); } return *this; } int brTem () const { return n; } Tacka& operator[] (int i) { if (i<0 || i>=n) exit (1); return niz[i]; } const Tacka& operator[] (int i) const { if (i<0 || i>=n) exit (1); return niz[i]; } double obim () const; friend bool operator== (const MUgao mu1, const MUgao& mu2) { return mu1.obim() == mu2.obim(); } friend bool operator< (const MUgao mu1, const MUgao& mu2) { return mu1.obim() < mu2.obim(); } friend istream& operator>> (istream& ut, MUgao& mu); friend ostream& operator<< (ostream& it, const MUgao& mu); };(садржај)
// mugao.cpp #include "mugao.h" void MUgao::kopiraj (const MUgao& mu) { niz = new Tacka [n = mu.n]; for (int i=0; i<n; i++) niz[i] = mu.niz[i]; } MUgao::MUgao (int nn) { niz = new Tacka [n = nn]; const double PI = 3.141592; for (int i=0; i<n; i++) { double fi = 2 * PI * i / n; niz[i] = Tacka (cos(fi), sin(fi)); } } double MUgao::obim () const { double s = rast (niz[0], niz[n-1]); for (int i=0; i<n-1; i++) s += rast (niz[i], niz[i+1]); return s; } istream& operator>> (istream& ut, MUgao& mu) { mu.brisi (); cin >> mu.n; mu.niz = new MUgao::Tacka [mu.n]; for (int i=0; i<mu.n; i++) cin >> mu.niz[i].x >> mu.niz[i].y; return ut; } ostream& operator<< (ostream& it, const MUgao& mu) { it << '['; for (int i=0; i<mu.n; i++) { if (i) it << ';'; it << '(' << mu.niz[i].x << ',' << mu.niz[i].y << ')'; } return it << ']'; }
// test.cpp #include "mugao.h" #include <iostream> using namespace std; int main () { while (true) { cout << "n? "; int n; cin >> n; if (n <= 0) break; MUgao* niz = new MUgao [n]; for (int i=0; i<n; i++) { cout << "mu[" << i << "]? "; cin >> niz[i]; } for (int i=0; i<n-1; i++) for (int j=i+1; j<n; j++) if (niz[i] < niz[j]) { MUgao mu = niz[i]; niz[i] = niz[j]; niz[j] = mu; } for (int i=0; i<n; cout<<niz[i++]<<endl); delete [] niz; } }
n? 4 mu[0]? 3 0 0 1 0 0 1 mu[1]? 4 1 1 1 -1 -1 -1 1 -1 mu[2]? 3 3 3 3 5 4 4 mu[3]? 4 2 2 2 3 3 3 3 2 [(1,1);(1,-1);(-1,-1);(1,-1)] [(3,3);(3,5);(4,4)] [(2,2);(2,3);(3,3);(3,2)] [(0,0);(1,0);(0,1)] n? 0
Copyright © 2010, Laslo Kraus
Последња ревизија: 4.10.2010.