You are on page 1of 2

Dr.

eljko Juri: Tehnike programiranja /kroz programski jezik C++/


Kolekcija neobaveznih zadataka za ponavljanje prethodnog i utvrivanje novog gradiva

Zadaci za samostalno vjebanje 9


Akademska godina 2013/14

Zadaci za samostalno vjebanje 9.


Svi zadaci dati ovdje su takvi da se mogu uraditi koritenjem iskljuivo gradiva prvih devet predavanja i
ranije steenog predznanja na predmetu Osnove raunarstva. Tarabom (#) su oznaeni zadaci koji su u
prethodnim generacijama bili zadaci za zadau. Razlog zbog kojeg je ovdje dat veoma mali broj
zadataka za samostalno vjebanje lei u injenici da se upotrebljivi zadaci sa klasama teko mogu
reazlizirati bez primjene konstruktora, koji se obrauju tek u Predavanju 10 i Predavanju 11 (kad se
preu jo neki koncepti, bie zadataka za samostalno vjebanje za izvoz, ukljuujui ispitne zadatke sa
ranijih rokova). Savjetuju se studenti da koriste razne C++11 koje su raene na predavanjima gdje god bi
im one mogle biti od koristi, ali da takoer i razmisle kako bi se isti problem mogao rijeiti na stariji
nain (tj. bez dodataka uvedenih u C++11).
1#. Neka je data deklaracija
enum Pravci {Sjever, Istok, Jug, Zapad};

Definirajte klasu Robot koja predstavlja zamiljenog robota koji moe da se kree kroz
koordinatni sistem sa cjelobrojnim koordinatama i koji moe da gleda u jednom od etiri pravca
definirana u pobrojanom tipu Pravci. Klasa treba da ima sljedei interfejs:
void Postavi(int x, int y, Pravci p);
void PomjeriSe(int korak);
void OkreniSeNalijevo();
void OkreniSeNadesno();
int DajPozicijuX() const;
int DajPozicijuY() const;
Pravci DajOrjentaciju() const;
void Ispisi() const;

Metoda Postavi postavlja robot na zadanu poziciju, i usmjerava ga u zadani pravac. Metoda
PomjeriSe pomjera robota zadani broj koraka u pravcu u kojem robot trenutno gleda. Metode
OkreniSeNalijevo i OkreniSeNadesno obru robota za 90o na lijevo odnosno na desno.
Metode DajPozicijuX, DajPozicijuY i DajOrjentaciju treba da vrate tekuu poziciju
odnosno orjentaciju robota. Metoda Ispisi treba da ispie podatke o poziciji i orjentaciji robota
na nain kao u sljedeem primjeru:
Robot se nalazi na poziciji (3,5) i gleda na istok.
Napisanu klasu upotrijebite u programu u kojem e korisnik moi da bira neku od dozvoljenih
operacija sa robotom, a nakon svake izvrene operacije program treba da prikae tekuu poziciju i
orjentaciju (kratke metode dozvoljeno je implementirati odmah unutar deklaracije klase).
2#. Definirajte klasu Robot koja predstavlja zamiljenog robota koji moe da se kree kroz
koordinatni sistem sa realnim koordinatama i koji moe da gleda u proizvoljnom pravcu. Klasa
treba da ima sljedei interfejs:
void Postavi(double x, double y, double ugao);
void IdiNaprijed(double pomak);
void IdiNazad(double pomak);
void OkreniSeNaijevo(double ugao);
void OkreniSeNadesno(double ugao);
double DajPozicijuX() const;
double DajPozicijuY() const;
double DajOrjentaciju() const;
void Ispisi() const;

Metoda Postavi postavlja robot na zadanu poziciju, i usmjerava ga da gleda pod zadanim uglom
u odnosu na pozitivni smjer x ose. Pri tome se ugao zadaje u stepenima (to vrijedi i za sve ostale
1

Dr. eljko Juri: Tehnike programiranja /kroz programski jezik C++/


Kolekcija neobaveznih zadataka za ponavljanje prethodnog i utvrivanje novog gradiva

Zadaci za samostalno vjebanje 9


Akademska godina 2013/14

metode u kojima se spominju uglovi). Metoda IdiNaprijed pomjera robota za zadani iznos
duine u smjeru u kojem robot trenutno gleda, dok metoda IdiNazad pomjera robota za zadani
iznos duine u smjeru suprotnom od smjera u kojem robot trenutno gleda. Metode
OkreniSeNalijevo i OkreniSeNadesno obru robota za zadani iznos ugla (u stepenima)
nalijevo odnosno nadesno (tj. u smjeru suprotnom od kazaljke na satu, odnosno u smjeru kazaljke
na satu). Metode DajPozicijuX, DajPozicijuY i DajOrjentaciju treba da vrate
tekuu poziciju odnosno ugao pod kojim gleda robot. Metoda Ispisi treba da ispie podatke o
poziciji i orjentaciji robota na nain kao u sljedeem primjeru:
Robot se nalazi na poziciji (3.42,5.173) i gleda pod uglom 42.5 stepeni u odnosu na x osu.
Napisanu klasu upotrijebite u programu u kojem e korisnik moi da bira neku od dozvoljenih
operacija sa robotom, a nakon svake izvrene operacije program treba da prikae tekuu poziciju i
orjentaciju (kratke metode dozvoljeno je implementirati odmah unutar deklaracije klase).
3.

Definirajte i implementirajte klasu Tacka koja predstavlja taku u ravni. Klasa bi trebala
sadravati sljedei interfejs:
void Postavi(double x, double y);
void PostaviPolarno(double ro, double theta);
double DajX() const;
double DajY() const;
double DajRo() const;
double DajTheta() const;
void Transliraj(double delta_x, double delta_y);
void Rotiraj(double alpha);
void Rotiraj(double alpha, const Tacka &centar);
friend double Rastojanje(const Tacka &t1, const Tacka &t2);

Metoda Postavi postavlja informacije o poloaju take na osnovu Dekartovih koordinata x i y


koje se zadaju kao parametri, dok metoda PostaviPolarno radi slinu stvar samo na osnovu
polarnih koordinata i . Metode DajX, DajY, DajRo i DajTheta vraaju kao rezultat
odgovarajue Dekartove odnosno polarne koordinate take. Metoda Transliraj pomjera taku
za iznos x u smjeru x-ose i iznos y u smjeru y-ose, pri emu se vrijednosti x i y navode kao
parametri. Metoda Rotiraj sa jednim parametrom rotira taku za ugao oko koordinatnog
poetka u smjeru suprotnom od kazaljke na satu, pri emu se zadaje kao parametar. Predviena je
i metoda Rotiraj sa dva parametra, koja radi slino kao i prethodna, samo to umjesto oko
koordinatnog poetka vri rotaciju oko take koja se zadaje kao drugi parametar funkcije. Konano,
prijateljska funkcija Rastojanje vraa kao rezultat rastojanje izmeu taaka koje se zadaju kao
parametri funkcije. Implementaciju klase zasnujte na privatnim atributima koji uvaju Dekartove
koordinate take. Napiite i kratki testni program u kojem ete demonstrirati ispravan rad svih
elemenata napisane klase. Posebno testirajte da li klasa ispravno radi sa takama u sva etiri
kvadranta i takama koje lee na nekoj od koordinatnih osa (pri nepaljivoj implementaciji ovdje
esto nastaju greke).
Napomena: Funkcija atan2 iz biblioteke cmath Vam moe biti od velike koristi. Ako ne znate
ta radi ova funkcija, informacije su lako dostupne na internetu (wikipedia recimo).
4.

Izmijenite implementaciju klase razvijene u prethodnom zadatku tako da se u klasi umjesto


Dekartovih koordinata uvaju polarne koordinate take. Uvjerite se da e nakon obavljene izmjene
implementacije testni program koji koristi napisanu klasu i dalje raditi posve identino, bez ikakvih
izmjena.

5.

Razmotrite kakve bi se izmjene mogle uiniti da klase razvijene u prethodna dva zadatka opisuju
taku u prostoru umjesto taaka u ravni. Recimo, mogle bi se podrati cilindrine i sferne
koordinate (najvei problem bi predstavljala rotacija, s obzirom da se taka u prostoru ne moe
rotirati oko druge take, nego samo oko pravca).
2

You might also like