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