Ласло Краус |
ИР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.