You are on page 1of 3

Objektno orijentirano programiranje

ispit
9. svibanj 2006.

1. (30 bodova)
Napišite template klasu point i potrebne operatore tako da sljedeći program
#include <iostream>

int main(){
point<int> p1(2,3), p2(3,4);
std::cout << "udaljenost tocaka " << p1 << " i " << p2 << " je " << p1 - p2 << std::endl;
}

pravilno ispisuje udaljenost među zadanim točkama


udaljenost tocaka (2,3) i (3,4) je 1.41421

2. (35 bodova)
Napišite interface idict koji sadrži funkciju translate (prima riječ na engleskom, vraća riječ na hrvatskom).
Napišite klasu dict koja implementira taj interface koristeći standardnu mapu. U slučaju da u mapi ne postoji tražena riječ
funkcija translate baca iznimku tipa string (upravo riječ koja nije pronađena).
Napišite program u kojem se učita jedan string i pokuša prevesti pomoću rječnika. Program mora ispisati prijevod riječi ili poruku
da tražena riječ ne postoji.

3. (35 bodova)
U datoteci border.txt su koordinate granice Republike Hrvatske (u svakom redu je geografska dužina i širina jedne točke). Napišite
program koji koristeći samo standardne algoritme
- učita koordinate u vektor koordinata
- izbaci sve invalidne koordinate (negativna širina ili dužina)
- ispiše najjužniju i najsjeverniju geografsku širinu
Objektno orijentirano programiranje
rješenja ispita
9. svibanj 2006.
1.
#include <cmath> // sqrt

template <typename T>


struct point {
T x, y;
point(T x, T y) : x(x), y(y) {}
};

template <typename T>


std::ostream& operator<<(std::ostream& os, const point<T>& p){
return os << '(' << p.x << ',' << p.y << ')';
}

template <typename T>


double operator-(const point<T>& p1, const point<T>& p2){
T dx(p2.x - p1.x), dy(p2.y - p1.y);
return sqrt(dx*dx + dy*dy);
}

2.
#include <string>
#include <map>
#include <iostream>

class idict {
public:
virtual std::string translate(std::string word) = 0;
virtual ~idict() = 0;
};

idict::~idict() {}

typedef std::map<std::string, std::string> cont;

class dict : public idict {


cont c;
public:
std::string translate(std::string word);
};

std::string dict::translate(std::string word){


cont::iterator it = c.find(word);
if(it == c.end()) throw word;
return it->second;
}

int main(){
try {
dict d;
std::string s; std::cin >> s;
std::cout << "prijevod: " << d.translate(s);
}catch(std::string& s){
std::cout << "ne postoji rijec: " << s << std::endl;
}
}
3.
#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <algorithm>

struct coord {
double lon, lat;
};

std::istream& operator>>(std::istream& is, coord& p){


return is >> p.lon >> p.lat;
}

bool operator<(const coord& p1, const coord& p2){


return p1.lat < p2.lat;
}

bool rem(const coord& p){


return p.lon < 0 || p.lat < 0;
}

int main(){
using namespace std;
ifstream in("border.txt");
istream_iterator<coord> is(in), es;
std::vector<coord> c; copy(is, es, back_inserter(c));
std::vector<coord>::iterator it = remove_if(c.begin(), c.end(), rem);
c.erase(it, c.end());
it = max_element(c.begin(), c.end());
if(it != c.end()) std::cout << "sjever: " << it->lat << endl;
it = min_element(c.begin(), c.end());
if(it != c.end()) std::cout << "jug: " << it->lat << endl;
}

You might also like