OOP C++ Zadaci 2
OOP C++ Zadaci 2
OOP C++ Zadaci 2
ispit
4. travanj 2005.
1. (30 bodova)
Napišite klase rect i size tako da sljedeći program:
#include <iostream>
int main(){
oop::rect r1(0, 0, 50, 50), r2(50, 50, 100, 100);
r1 += oop::size(10, 10); // offset rect
std::cout << (r1 & r2); // print intersection
}
2. (30 bodova)
Napišite klasu array (u konstruktoru se svi elementi postavljaju na zadanu vrijednost) tako da sljedeći program:
#include <iostream>
#include <algorithm>
int main(){
array<double, 8> a(1.);
a[0] = a[2] = 2;
3. (40 bodova)
U datoteci osobe.txt se u svakom redu nalazi ime osobe i njezina visina (u cm). Napišite program koji koristeći standardne algoritme:
a) učita sve osobe u vektor
b) izbaci sve sa visinom manjom od 100 i većom od 200 cm
c) ispiše prosjek visina
d) sortira silazno po visini (u slučaju iste visine, uzlazno po abecedi)
e) ispiše sve osobe u obliku "ime: visina"
Objektno orijentirano programiranje
rješenja ispita
4. travanj 2005.
1. 2.
namespace oop { template <typename T, int N>
class array {
class size { T a[N];
public: public:
int x, y; array(const T& v){
size(int x, int y) : x(x), y(y) {} for(int i=0; i<N; ++i)
}; a[i] = v;
}
class rect { T& operator[](int i) { return a[i]; }
public: T* begin() { return a; }
int left, top, right, bottom; T* end() { return a+N; }
rect(int l, int t, int r, int b) : };
left(l), top(t), right(r), bottom(b) {}
} // namespace
3.
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <numeric> // accumulate
using namespace std;
struct person {
string name;
unsigned int height; // cm
operator unsigned int() const { return height; } // for accumulate
};
int main(){
ifstream f("osobe.txt");
istream_iterator<person> is(f), es;
ostream_iterator<person> os(cout, "\n");
vector<person> c;
copy(is, es, back_inserter(c));
c.erase(remove_if(c.begin(), c.end(), rem), c.end());
if(c.size())
cout << "prosjek: " << accumulate(c.begin(), c.end(), 0.)/c.size() << endl;