|
Sva pitanja, predloge ili primedbe u vezi sa takmičenjima iz programiranja
možete slati na e-mail:
tak.prog@gmail.com
U toku perioda za žalbe, sve žalbe možete slati na ovaj isti e-mail.
|
logo by Igor Antolović
|
|
|
zadatak: Robot
|
Kompanija za izradu igračaka u kojoj ste zaposleni je počela da pravi novu vrstu robota. On ume da peva, govori, plače, rešava domaće zadatke i još dosta zanimljivih stvari. Svakako, jedna od najbitnijih karakteristika ovog robota je kretanje. Robot može da se kreće unapred ili da se okrene oko svoje ose za 90°. Zbog bolje orijentacije u prostoru, robotu je neophodno da uvek zna svoje koordinate. Kao članu projektnog tima koji se bavi softverom, dobili ste zadatak da na osnovu kretanja i okretanja robota odredite njegove koordinate.
Ulaz:
U prvom redu ulazne datoteke ZAD1.DAT, dati su prirodni brojevi N, X i Y, tako da važi 1 ≤ N, X, Y ≤ 1000. N je broj komandi koje izvršava robot, a X i Y su početne koordinate robota u metrima. U drugom redu se nalazi N slova, od kojih je svaki jedno od tri slova: "D", "L" ili "N" (velikim slovima). "D" označava okretanje za 90° u smeru kazaljki na satu, "L" u smeru suprotnom od smera kazaljki, dok "N" predstavlja kretanje unapred. Dužina jednog robotovog koraka je 1 metar. Robot je u početku okrenut tako da gleda u pozitivnom smeru x-ose.
Izlaz:
U prvom i jedinom redu izlazne datoteke ZAD1.RES treba ispisati dva cela broja, X i Y, razdvojena razmakom, koji predstavljaju konačnu poziciju robota.
Primer:
ZAD1.DAT
|
|
ZAD1.RES
|
6 2 2
NNNLNN
|
|
5 4
|
|
|
rešenje
|
Potrebno je u svakom trenutku voditi računa o trenutnoj poziciji robota, kao i o smeru u kome je on okrenut. Nakon učitavanja svakog sledećeg karaktera, ukoliko je on "D" ili "L", onda treba promeniti smer kretanja, a ako je "N", onda treba promeniti poziciju robota u zavisnosti od njegove prethodne pozicije i smera kretanja.
Pseudokod
Read(N, X, Y)
X1 = 1, Y1 = 0 //početni smer
FOR I = 1 to N
Read(C)
IF (C = ‘N’)
X = X + X1
Y = Y + Y1
ELSE IF (C = ‘L’)
X2 = -Y1 //rotacija u pozitivnom smeru
Y2 = X1 //suprtno od kazaljke
X1 = X2
Y1 = Y2
ELSE
X2 = Y1 //rotacija u negativnom smeru (kazaljke)
Y2 = -X1
X1 = X2
Y1 = Y2
Write(X, Y)
|
|
fajl: robot.cpp
|
#include <fstream.h>
ifstream in("zad1.dat");
ofstream out("zad1.res");
int x, y, p, n;
char c;
void levo(){
p = (p+1)%4;
}
void desno(){
p = (p+3)%4;
}
void napred(){
if (p == 0)
x++;
else if (p == 1)
y++;
else if (p == 2)
x--;
else
y--;
}
int main(){
p = 0;
in >> n >> x >> y;
for (int i = 0; i < n; i++){
in >> c;
if (c == 'L')
levo();
else if (c == 'D')
desno();
else napred();
}
out << x << " " << y << endl;
in.close();
out.close();
return 0;
}
|
|
|