Elektrotehnicki fakultet, Beograd  Ласло Краус ИР2ОО1
Први колоквијум
2. 12. 2005.

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

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

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

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

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

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

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

а) У чему су разлике, а у чему сличности референце (упућивача) и показивача у језику C++?

б) Да ли нека метода позвана за један објекат неке класе има право приступа приватној секцији другог објекта исте класе и зашто?

в) Колико конструктора и колико деструктора може имати нека класа и зашто?

г) У чему је основна разлика између иницијализације и доделе вредности? Како се ове две ствари прилагођавају конкретним потребама неке класе?

д) Да ли се у језику C++ могу редефинисати значења оператора за стандардне типове и зашто?


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


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

#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;
}
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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