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

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

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

Пројектовати на језику C++ класу за скупове целих бројева. Предвидети:

  1. иницијализацију празног скупа,
  2. иницијализацију скупа другим скупом,
  3. уништавање скупа,
  4. додељивање вредности једног скупа другом скупу (skup1=skup2),
  5. дохватање броја елемената скупа (+skup),
  6. испитивање да ли се број налази у скупу (skup%br),
  7. уметање једног броја у скуп (skup+=br),
  8. налажење уније два скупа (skup1+skup2),
  9. дохватање елемента са задатим редним бројем из скупа (skup(i)),
  10. исписивање скупа (d<<skup).

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

  1. читајући два низа бројева направи два скупа и испише добијене скупове,
  2. направи трећи скуп као унију прочитана два скупа и испише резултат,
  3. израчуна и испише средњу вредност елемената трећег скупа.

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


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

// skup.h

#include <iostream.h>
#include <stdlib.h>

class Skup {
  int *niz, duz;
  void kopiraj (const Skup& s);
  void brisi () { delete [] niz; niz = 0; duz = 0; }
public:
  Skup () { niz = 0; duz = 0; }
  Skup (const Skup& s) {kopiraj(s);}
  ~Skup () { brisi (); }
  Skup& operator= (const Skup& s) {
    if (this != &s) { brisi (); kopiraj (s); }
    return *this;
  }
  int operator+ () const { return duz; }
  bool operator% (int b) const;
  Skup& operator+= (int b);
  friend Skup operator+ (const Skup& s1, const Skup& s2);
  int operator() (int i) {
    if (i<0 || i>=duz) exit (1);
    return niz[i];
  }
  friend ostream& operator<< (ostream& d, const Skup& s);
};

// skup.cpp #include "skup.h" void Skup::kopiraj (const Skup& s) { niz = new int [duz = s.duz]; for (int i=0; i<duz; i++) niz[i] = s.niz[i]; } bool Skup::operator% (int b) const { for (int i=0; i<duz; i++) if (niz[i] == b) return true; return false; } Skup& Skup::operator+= (int b) { if (! (*this % b)) { int *n = new int [duz+1]; for (int i=0; i<duz; i++) n[i] = niz[i]; n[duz++] = b; delete [] niz; niz = n; } return *this; } Skup operator+ (const Skup& s1, const Skup& s2) { Skup s (s1); for (int i=0; i<s2.duz; s+=s2.niz[i++]); return s; } ostream& operator<< (ostream& d, const Skup& s) { d << '{'; for (int i=0; i<s.duz; i++) { if (i > 0) d << ','; d << s.niz[i]; } return d << '}'; }
// skupt.cpp #include "skup.h" #include <iostream.h> int main () { Skup s1, s2; int n, i; cout << "n1? "; cin >> n; cout << "niz1? "; for (i=0; i<n; i++) { int b; cin >> b; s1 += b; } cout << "n2? "; cin >> n; cout << "niz2? "; for (i=0; i<n; i++) { int b; cin >> b; s2 += b; } cout << "s1 = " << s1 << endl; cout << "s2 = " << s2 << endl; Skup s3 (s1+s2); cout << "s3 = " << s3 << endl; double sr = 0; for (i=0; i<+s3; sr+=s3(i++)); if (+s3) sr /= +s3; cout << "Sr. vr.= " << sr << endl; return 0; }
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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