Visa elektrotehnicka skola, Beograd
Ласло Краус
Објектно програмирање - колоквијуми
Први колоквијум
Друга група
22. 4. 2007.

Задатак | Напомене | Решење

Поставка задатка (решење | садржај)

Многоугао у равни се задаје низом тачака (xi,yi) које чине темена многоугла. Написати на језику C++ класу за многоуглове у равни (тачке представљати структуром са два реална поља). Предвидети:

  1. иницијализацију многугла задатог броја темена n (подразумевано 3) са теменима на јединичном кругу са центром у координатном почетку (xi = cos(2πi/n), yi = sin(2πi/n), i=0,1,…,n−1).
  2. иницијализацију многоугла другим многоуглом,
  3. уништавање многоугла,
  4. додељивање вредности једног многогла другом (mu1=mu2),
  5. дохватање броја темена многоугла,
  6. приступање задатом темену (mu[i] – недозвољен индекс прекида програм),
  7. израчунавање обима многоугла (растојање две тачке: ),
  8. упоређивање обима два многоугла (mu1==mu2, mu1<mu2),
  9. читање полинома из улазног тока (ut>>mu – чита се број темена и низ тачака),
  10. уписивање полинома у излазни ток (it<<mu) у облику mu[(x0,y0);(x1,y1);;(xn−1,yn−1)].

Написати на језику C++ главни програм који:


Напомене (садржај)


Решење задатка (поставка | садржај)

// mugao.h

#include <iostream>
#include <cmath>
using namespace std;

class MUgao {
  struct Tacka {
    double x, y;
    Tacka (double a=0, double b=0) { x = a; y = b; }
  };
  static double rast(Tacka t1, Tacka t2){
    return sqrt (pow (t1.x-t2.x, 2) + pow (t1.y-t2.y, 2));
  }
  Tacka* niz; int n;
  void kopiraj (const MUgao& mu);
  void brisi () { delete [] niz; niz = 0; n = 0; }
public:
  explicit MUgao (int nn=3);
  MUgao (const MUgao& mu){ kopiraj(mu); }
  ~MUgao () { brisi (); }
  MUgao& operator= (const MUgao& mu) {
    if (this != &mu) { brisi (); kopiraj (mu); }
    return *this;
  }
  int brTem () const { return n; }
  Tacka& operator[] (int i) {
    if (i<0 || i>=n) exit (1);
    return niz[i];
  }
  const Tacka& operator[] (int i) const {
    if (i<0 || i>=n) exit (1);
    return niz[i];
  }
  double obim () const;
  friend bool operator== (const MUgao mu1, const MUgao& mu2)
    { return mu1.obim() == mu2.obim(); }
  friend bool operator< (const MUgao mu1, const MUgao& mu2)
    { return mu1.obim() < mu2.obim(); }
  friend istream& operator>> (istream& ut, MUgao& mu);
  friend ostream& operator<< (ostream& it, const MUgao& mu);
};

// mugao.cpp #include "mugao.h" void MUgao::kopiraj (const MUgao& mu) { niz = new Tacka [n = mu.n]; for (int i=0; i<n; i++) niz[i] = mu.niz[i]; } MUgao::MUgao (int nn) { niz = new Tacka [n = nn]; const double PI = 3.141592; for (int i=0; i<n; i++) { double fi = 2 * PI * i / n; niz[i] = Tacka (cos(fi), sin(fi)); } } double MUgao::obim () const { double s = rast (niz[0], niz[n-1]); for (int i=0; i<n-1; i++) s += rast (niz[i], niz[i+1]); return s; } istream& operator>> (istream& ut, MUgao& mu) { mu.brisi (); cin >> mu.n; mu.niz = new MUgao::Tacka [mu.n]; for (int i=0; i<mu.n; i++) cin >> mu.niz[i].x >> mu.niz[i].y; return ut; } ostream& operator<< (ostream& it, const MUgao& mu) { it << '['; for (int i=0; i<mu.n; i++) { if (i) it << ';'; it << '(' << mu.niz[i].x << ',' << mu.niz[i].y << ')'; } return it << ']'; }
// test.cpp #include "mugao.h" #include <iostream> using namespace std; int main () { while (true) { cout << "n? "; int n; cin >> n; if (n <= 0) break; MUgao* niz = new MUgao [n]; for (int i=0; i<n; i++) { cout << "mu[" << i << "]? "; cin >> niz[i]; } for (int i=0; i<n-1; i++) for (int j=i+1; j<n; j++) if (niz[i] < niz[j]) { MUgao mu = niz[i]; niz[i] = niz[j]; niz[j] = mu; } for (int i=0; i<n; cout<<niz[i++]<<endl); delete [] niz; } }
n? 4 mu[0]? 3 0 0 1 0 0 1 mu[1]? 4 1 1 1 -1 -1 -1 1 -1 mu[2]? 3 3 3 3 5 4 4 mu[3]? 4 2 2 2 3 3 3 3 2 [(1,1);(1,-1);(-1,-1);(1,-1)] [(3,3);(3,5);(4,4)] [(2,2);(2,3);(3,3);(3,2)] [(0,0);(1,0);(0,1)] n? 0
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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