![]() Ласло Краус |
Објектно програмирање - колоквијуми Први колоквијум Прва група 22. 4. 2007. |
|---|
Скуп целих бројева садржи једноструко спрегнуту неуређену листу чији сви елементи садрже различите бројеве. Написати на језику C++ класу за скупове целих бројева. Предвидети:
skup1=skup2),
skup+=br – нови бројеви се стављају на крај листе),
skup1+=skup2 и skup1+skup2),
it<<skup).
Написати на језику C++ програм који:
ispitx (x је број радне станице за којим се ради). Лозинка на свакој радној станици је student.N: (Nastava on \\Xs200-2) у каталогу ObjektnoProg\RSx (x је број радне станице за којим се ради).
// 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}
(садржај)
Copyright © 2010, Laslo Kraus
Последња ревизија: 4.10.2010.