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

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

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

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

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

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


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


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

// skup.h

#include <iostream>
using namespace std;

class Skup {
  struct Elem {
    int  broj;
    Elem* sled;
    Elem (int b) { broj = b; sled = 0; }
  };
  Elem *prvi, *posl;
  int duz;
  void kopiraj (const Skup& s);
  void brisi ();
public:
  Skup () { prvi = posl = 0; duz = 0; }
  Skup (int b) { prvi = posl = new Elem (b); duz = 1; }
  Skup (const Skup &s) { kopiraj (s); }
  ~Skup () { brisi (); }
  Skup& operator= (const Skup& s) {
    if (this != &s) { brisi (); kopiraj (s); }
    return *this;
  }
  int brElem () const { return duz; }
  Skup& operator+= (int b);
  Skup& operator+= (const Skup& s);
  friend Skup operator+ (const Skup& s1, const Skup& s2)
    { return Skup (s1) += s2; }
  friend ostream& operator<< (ostream& it, const Skup& s);
};

// skup.cpp #include "skup.h" void Skup::kopiraj (const Skup& s) { prvi = posl = 0; duz = s.duz; for (Elem* tek=s.prvi; tek; tek=tek->sled) posl = (!prvi ? prvi : posl->sled) = new Elem (tek->broj); } void Skup::brisi () { while (prvi) { Elem* stari = prvi; prvi = prvi->sled; delete stari; } posl = 0; duz = 0; } Skup& Skup::operator+= (int b) { Elem* tek = prvi; while (tek && tek->broj != b) tek = tek->sled; if (!tek) { posl = (!prvi ? prvi : posl->sled) = new Elem (b); duz++; } return *this; } Skup& Skup::operator+= (const Skup& s) { for (Elem* tek=s.prvi; tek; tek=tek->sled) *this += tek->broj; return *this; } ostream& operator<< (ostream& it, const Skup& s) { it << '{'; for (Skup::Elem* tek=s.prvi; tek; tek=tek->sled) { it << tek->broj; if (tek->sled) it << ','; } return it << '}'; }
// test.cpp #include "skup.h" #include <iostream> using namespace std; Skup citaj () { cout << "n? "; int n; cin >> n; Skup s; cout << "s? "; for (int i=0; i<n; i++) { int b; cin >> b; s += b; } return s; } int main () { Skup s1 (citaj ()); Skup s2 (citaj ()); cout << "s1= " << s1 << endl; cout << "s2= " << s2 << endl; Skup s3 (s1+s2); cout << "s3= " << s3 << endl; }
n? 5 s? 2 6 3 4 1 n? 7 s? 0 3 9 5 4 3 8 s1= {2,6,3,4,1} s2= {0,3,9,5,4,8} s3= {2,6,3,4,1,0,9,5,8}
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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