Ласло Краус |
ИР2ОО1 Први колоквијум 2. 12. 2005. |
|---|
Саставити на језику C++ следеће класе (класе опремити оним конструкторима, деструктором и оператором за доделу вредности, који су потребни за безбедно коришћење класа):
vekt1−vekt2, vekt1−=vekt2), да се вектор прочита из датотеке (dat>>vekt) и да се упише у датотеку (dat<<vekt) у облику (vx,vy).
mnog[ind], индекс изван опсега прекида програм), да се израчуна обим многоугла и да се многоугао упише у датотеку (dat<<mnog), у облику М[v0,v1,…,vn−1] где су vi резултати писања вектора темена.
(20 поена) Написати на језику C++ главни програм који са главног улаза прочита низ многоуглова, уреди низ по обимима многоуглова и испише на главном излазу уређени низ многоуглова заједно са њиховим обимима.
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) У чему су разлике, а у чему сличности референце (упућивача) и показивача у језику C++?
б) Да ли нека метода позвана за један објекат неке класе има право приступа приватној секцији другог објекта исте класе и зашто?
в) Колико конструктора и колико деструктора може имати нека класа и зашто?
г) У чему је основна разлика између иницијализације и доделе вредности? Како се ове две ствари прилагођавају конкретним потребама неке класе?
д) Да ли се у језику C++ могу редефинисати значења оператора за стандардне типове и зашто?
#include <cmath>
#include <iostream>
#include <cstdlib>
using namespace std;
class Vektor {
double x, y;
public:
Vektor (double xx=1, double yy=0) { x = xx; y = yy; }
double vx () const { return x; }
double vy () const { return y; }
double abs () const { return sqrt (x*x + y*y); }
friend Vektor operator- (const Vektor& v1, const Vektor& v2)
{ return Vektor (v1.x-v2.x, v1.y-v2.y); }
Vektor& operator-= (const Vektor& v) { *this = *this - v; }
friend istream& operator>> (istream& d, Vektor& v)
{ return d >> v.x >> v.y; }
friend ostream& operator<< (ostream& d, const Vektor& v)
{ return d << '(' << v.x << ',' << v.y << ')'; }
};
class Mnogougao {
Vektor* niz; int n;
void kopiraj (const Mnogougao& m);
void brisi () { delete [] niz; }
public:
explicit Mnogougao (int nn=3);
Mnogougao (const Mnogougao& m) { kopiraj (m); }
~Mnogougao () { brisi (); }
Mnogougao& operator= (const Mnogougao& m) {
if (this != &m) { brisi (); kopiraj (m); }
return *this;
}
int brTem () const { return n; }
Vektor& operator[] (int ind) {
if (ind<0 || ind>=n) exit (1);
return niz[ind];
}
const Vektor& operator[] (int ind) const {
if (ind<0 || ind>=n) exit (1);
return niz[ind];
}
double obim () const;
friend ostream& operator<< (ostream& d, const Mnogougao& m);
};
void Mnogougao::kopiraj (const Mnogougao& m) {
niz = new Vektor [n = m.n];
for (int i=0; i<n; i++) niz[i] = m.niz[i];
}
Mnogougao::Mnogougao (int nn) {
niz = new Vektor [n = nn];
double fi = 2 * 3.14159 / n;
for (int i=0; i<n; i++) niz[i] = Vektor (cos(i*fi), sin(i*fi));
}
double Mnogougao::obim () const {
double s = (niz[n-1]-niz[0]).abs();
for (int i=1; i<n; i++) s += (niz[i] - niz[i-1]).abs ();
return s;
}
ostream& operator<< (ostream& d, const Mnogougao& m) {
d << "M[";
for (int i=0; i<m.n; i++) {
if (i) d << ',';
d << m.niz[i];
}
return d << ']';
}
int main () {
cout << "Duzina niza? ";
int m; cin >> m;
Mnogougao* niz = new Mnogougao [m];
for (int i=0; i<m; i++) {
cout << "Broj temena? ";int n; cin >> n;
niz[i] = Mnogougao(n);
for (int j=0; j<n; j++) { cout << "Teme [" << j << "]? "; cin >> niz[i][j]; }
}
for (int i=0; i<m-1; i++)
for (int j=i+1; j<m; j++)
if (niz[j].obim() < niz[i].obim()) { Mnogougao p = niz[i]; niz[i] = niz[j]; niz[j] = p; }
cout << "\nUredjeno:\n";
for (int i=0; i<m; i++) cout << niz[i] << " O=" << niz[i].obim() << endl;
return 0;
}
(⇒ почетак)
Copyright © 2010, Laslo Kraus
Последња ревизија: 30.8.2010.