Elektrotehnicki fakultet, Beograd  Ласло Краус СИ2ОО1
Први колоквијум
10. 11. 2006.

Аутори: Игор Тартаља и Ласло Краус

Задаци: 1 2 | Напоменe | Решења: 1

Поставка задатка 1 (укупно 70 поена) ( решење | почетак)

Саставити на језику C++ следеће класе (класе опремити оним конструкторима и деструктором који су потребни за безбедно коришћење класа):

(20 поена) Написати на језику C++ програм који читајући материјалне тачке с главног улаза направи низ материјалних тачака (читање се завршава уносом негативне масе), испише на главном излазу добијени низ као и тачку која највише привлачи тачку јединичне масе у координатном почетку и понавља претходне кораке све док не прочита празан низ (низ дужине 0).

Поставка задатка 2 (30 поена) ( почетак)

Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:

а) Шта је то л-вредност (lvalue)?

б) Шта је улога, шта је операнд, а шта резултат операције за операторе new и delete?

в) Која је намена конструктора копије у класи X, којег типа је његов формални аргумент, а ког стварни?


Напоменe ( почетак)


Решење задатка 1 ( поставка | почетак)

#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

         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

Copyright © 2010, Laslo Kraus
Последња ревизија: 30.8.2010.