Ласло Краус |
СИ2ОО1 Први колоквијум 10. 11. 2006. |
---|
Саставити на језику C++ следеће класе (класе опремити оним конструкторима и деструктором који су потребни за безбедно коришћење класа):
(20 поена) Написати на језику C++ програм који читајући материјалне тачке с главног улаза направи низ материјалних тачака (читање се завршава уносом негативне масе), испише на главном излазу добијени низ као и тачку која највише привлачи тачку јединичне масе у координатном почетку и понавља претходне кораке све док не прочита празан низ (низ дужине 0).
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) Шта је то л-вредност (lvalue)?
б) Шта је улога, шта је операнд, а шта резултат операције за операторе new
и delete
?
в) Која је намена конструктора копије у класи X, којег типа је његов формални аргумент, а ког стварни?
#include <iostream> #include <cmath> using namespace std; class Tacka { double m, x, y, z; public: Tacka (double mm=1, double xx=0, double yy=0, double zz=0) { m = mm; x = xx; y = yy; z = zz; } double r (const Tacka& T) const { return sqrt (pow(x-T.x,2) +pow(y-T.y,2) + pow(z-T.z,2)); } double F (const Tacka& T) const { return 6.67e-11 * m * T.m / pow(r(T),2); } void pisi () const { cout << '[' << m << ",(" << x << ',' << y << ',' << z <<")]"; } }; class Niz { Tacka* niz; int kap, duz; public: explicit Niz (int k=5) { niz = new Tacka [kap = k]; duz = 0; } Niz (const Niz& n); ~Niz () { delete [] niz; } int vel () const { return duz; } Niz& dodaj (const Tacka& T); Tacka maxF (const Tacka& T) const; void pisi () const; }; Niz::Niz (const Niz& n) { niz = new Tacka [kap = n.kap]; duz = n.duz; for (int i=0; i<duz; i++) niz[i] = n.niz[i]; } Niz& Niz::dodaj (const Tacka& T) { if (duz == kap) { Tacka* pom = new Tacka [kap += 5]; for (int i=0; i<duz; i++) pom[i] = niz[i]; delete [] niz; niz = pom; } niz[duz++] = T; return *this; } Tacka Niz::maxF (const Tacka& T) const { double max = T.F(niz[0]); int ind = 0; for (int i=1; i<duz; i++) { double F = T.F(niz[i]); if (F > max) { max = F; ind = i; } } return niz[ind]; } void Niz::pisi () const { for (int i=0; i<duz; i++) { niz[i].pisi (); cout << endl; } } int main () { while (true) { Niz niz; while (true) { cout << "m,x,y,z? "; double m, x, y, z; cin >> m >> x >> y >> z; if (m < 0) break; niz.dodaj (Tacka(m,x,y,z)); } if (niz.vel () == 0) break; cout << "Niz tacaka:\n"; niz.pisi(); cout << "Najvise privlaci: "; niz.maxF(Tacka()).pisi(); cout << endl; } return 0; }
m,x,y,z? 5 3 4 5 m,x,y,z? 1 1 1 1 m,x,y,z? 8 2 9 4 m,x,y,z? 2 4 6 2 m,x,y,z? -1 0 0 0 Niz tacaka: [5,(3,4,5)] [1,(1,1,1)] [8,(2,9,4)] [2,(4,6,2)] Najvise privlaci: [1,(1,1,1)] m,x,y,z? -1 0 0 0
Copyright © 2010, Laslo Kraus
Последња ревизија: 30.8.2010.