24.11.2.24011820. Neka je data deklaracija enum Pravci {Sjever, Istok, Jug, Zapad}; Definirati klasu “Robot” koja predstavlja zamišljenog robota koji može da se kreće kroz koordinatni sistem sa cjelobrojnim koordinatama i koji može da gleda u jednom od četiri pravca definirana u pobrojanom tipu “Pravci”. Klasa treba da ima sljedeći interfejs:
Robot(int x, int y, Pravci p);
void PomjeriSe(int korak);
void Nalijevo();
void Nadesno();
int Pozicija_x() const;
int Pozicija_y() const;
Pravci Orjentacija() const;
void Ispisi() const;
Konstruktor treba da kreira robot na zadanoj poziciji koji gleda u zadanom pravcu. Metoda “PomjeriSe” pomjera robota zadani broj koraka u pravcu u kojem robot trenutno gleda. Metode “Nalijevo” i “Nadesno” obrću robota za 90o na lijevo odnosno na desno. Metode “Pozicija_x”, “Pozicija_y” i “Orjentacija” treba da vrate tekuću poziciju odnosno orjentaciju robota. Metoda “Ispisi“ treba da ispiše podatke o poziciji i orjentaciji robota na način kao u sljedećem primjeru:
Robot se nalazi na poziciji (3,–5) i gleda na istok.
Napisanu klasu upotrebiti u programu u kojem će korisnik moći da bira neku od dozvoljenih operacija sa robotom, a nakon svake izvršene operacije program treba da prikaže tekuću poziciju i orjentaciju (kratke metode dozvoljeno je implementirati odmah unutar deklaracije klase).

Opis rješenja:

Listing programa:

#include <iostream>
#include <conio.h>

using namespace std;
enum Pravci {Sjever, Istok, Jug, Zapad};
class Robot{
int X,Y;
Pravci P;
public:
Robot(int x, int y, Pravci p):X(x),Y(y){P=p;}
void PomjeriSe(int korak);
void Nalijevo(){
    P=Pravci(((P-1)%4+4)%4);
    Ispisi();
    }
void Nadesno(){
    P=Pravci((P+1)%4);
    Ispisi();
    }
int Pozicija_x() const{
    return X;
    }
int Pozicija_y() const{
    return Y;
    }

Pravci Orjentacija() const{
    return P;
    }
void Ispisi() const;
};

void Robot::Ispisi() const{
cout<<"Robot se nalazi na poziciji "
    <<"("<<X<<","<<Y<<") i gleda na ";
if(P==0)cout<<"S";
else if(P==1)cout<<"I";
else if(P==2)cout<<"J";
else cout<<"Z";
}
void Robot::PomjeriSe(int korak){
if(P==0)Y+=korak;
else if(P==1)X+=korak;
else if(P==2)Y-=korak;
else X-=korak;
Ispisi();
}

int main(){
Robot a(-1,3,Istok);
a.Nalijevo();
getch();
return 0;
}

Ispis na ekranu:

Riješeni zadaci 2    Index