![]() Ласло Краус |
Објектно програмирање - колоквијуми Први колоквијум Друга група 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.