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

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

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

Саставити на језику C++ класу изломљених линија које се представљају низом реалних бројева који чине дужине узастопних сегмената. Предвидети:

  1. иницијализацију линије задатим бројем сегмената (подразумевано 1) јединичних дужина,
  2. иницијализацију линије другом линијом,
  3. уништавање линије,
  4. додељивање вредности једнлиније другој (lin1=lin2),
  5. одређивање дужине линије,
  6. приступање задатом сегменту линије (lin[i] – недозвољен индекс прекида програм),
  7. испитивање да ли су две линије једнаке (lin1==lin2),
  8. испитивање да ли једна линија краћа од друге (lin1<lin2),
  9. уписивање линије у датотеку (dat<<lin) у облику lin[d,d,,d], где је d дужина једног сегмента.

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


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


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

// linija.h

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

class Linija {
  double* a; int n;
  void kopiraj (const Linija& lin);
  void brisi () { delete [] a; }
public:
  explicit Linija (int k=1);
  Linija (const Linija& lin) { kopiraj (lin); }
  ~Linija () { brisi (); }
  Linija& operator= (const Linija& lin) {
    if (this != &lin) { brisi (); kopiraj (lin); }
    return *this;
  }
  double duz () const;
  double& operator[] (int i) {
    if (i<0 || i>=n) exit (1);
    return a[i];
  }
  const double& operator[](int i) const {
    if (i<0 || i>=n) exit (1);
    return a[i];
  }
  friend bool operator== (const Linija& lin1, const Linija& lin2);
  friend bool operator< (const Linija& lin1, const Linija& lin2) {
    return lin1.duz () < lin2.duz ();
  }
  friend ostream& operator<< (ostream& dat, const Linija& lin);
};

// linija.cpp #include "linija.h" void Linija::kopiraj (const Linija& lin) { a = new double [n = lin.n]; for (int i=0; i<n; i++) a[i]=lin.a[i]; } Linija::Linija (int k) { a = new double [n = k]; for (int i=0; i<n; a[i++]=1); } double Linija::duz () const { double d = 0; for (int i=0; i<n; d+=a[i++]); return d; } bool operator== (const Linija& lin1, const Linija& lin2) { if (lin1.n != lin2.n) return false; for (int i=0; i<lin1.n; i++) if (lin1[i] != lin2[i]) return false; return true; } ostream& operator<< (ostream& dat, const Linija& lin) { dat << "lin["; for (int i=0; i<lin.n; i++) { if (i) dat << ','; dat << lin.a[i]; } return dat << ']'; }
// test.cpp #include "linija.h" #include <iostream> using namespace std; int main () { while (true) { cout << "Broj linija? "; int n; cin >> n; if (n <= 0) break; Linija* linije = new Linija [n]; for (int i=0; i<n; i++) { cout << i << ". linija? "; int m; cin >> m; linije[i] = Linija (m); for (int j=0; j<m; cin>>linije[i][j++]); } Linija min = linije[0], max = min; for (int i=1; i<n; i++) { if (linije[i] < min) min = linije[i]; if (max < linije[i]) max = linije[i]; } cout << "min= " << min << endl << "max= " << max << endl; delete [] linije; } return 0; }
Broj linija? 4 0. linija? 3 2 4 3 1. linija? 5 1 2 2 1 1 2. linija? 2 5 6 3. linija? 4 1 1 1 1 min= lin[1,1,1,1] max= lin[5,6] Broj linija? 0
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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