Poslao: 18 Maj 2014 19:05
|
offline
- Pridružio: 26 Feb 2012
- Poruke: 113
|
Tek sam poceo da se bavim programiranjem i naisao sam na jedan zadatak koji uopste ne mogu da resim.
Treba da se ukuca broj koraka, x i y koordinate "robota" i naredbe. Postoje 3 naredbe: n ("robot" se pomeri napred, tj. ako su mu koordinate x=1 y=1 nakon naredbe napred bice x=2 y=1, u slucaju da pre toga nije rotiran nekom naredbom), d ("robot" se
rotira za 90stepeni u smeru kretanja kazaljke na satu) i L (robot se rotira za 90stepeni u obrnutom smeru kretanja kazaljke na satu). Nakon klika na dugme button1 u labeli treba da se ispisu trenutne koordinate robota.
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 18 Maj 2014 19:18
|
offline
- vasa.93

- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
Potrebna ti je jedna promenljiva koja određuje smer kretanja. Neka bude tipa int, i recimo usvoji da je 0 - gore, 1 - levo, 2 - dole, 3 - desno. Poret toga, potreban ti je niz karaktera u koji upisuješ vrednost TextBox-a sa naredbom. Za svaki karakter tog niza vršiš određenu radnju (switch):
- Ukoliko je trenutno posmatrani karakter 'N', u zavisnosti od smera menjaš odgovarajuću koordinatu (switch). Ako je okrenut na gore (smer je 0), uvećavaš y za 1, itd.
- Ukoliko je trenutno posmatrani karakter 'L', inkrementiraš smer po modulu 4. Ako je bio okrenut na gore (0), okrećeš ga na levo ((0 + 1)%4 = 1), itd.
- Ukoliko je trenutno posmatrani karakter 'D', umanjuješ smer za jedan, i ukoliko je umanjeni smer manji od 0 resetuješ ga na 3. Ako je bio okrenut na gore (0), okrećeš ga na desno (0 - 1 = -1 -> smer postaje 3), itd.
|
|
|
|
Poslao: 18 Maj 2014 21:33
|
offline
- Pridružio: 26 Feb 2012
- Poruke: 113
|
Kao sto sam rekao tek sam poceo sa programiranjem i nesto sam uveliko zaje**o.. evo kod:
private void button1_Click(object sender, EventArgs e)
{
int x = Convert.ToInt32(textBox2.Text);
int y = Convert.ToInt32(textBox3.Text);
string na = Convert.ToString(textBox4.Text);
int smer = 0;
if (na == "l")
{
smer--;
if (smer < 0)
smer = 3;
if (smer > 3)
smer = 0;
}
if (na == "d")
{
smer++;
if (smer < 0)
smer = 3;
if (smer > 3)
smer = 0;
}
if (na == "n")
{
switch (smer)
{
case 0:
x = x+1;
break;
case 1:
y = y-1;
break;
case 2:
x = x-1;
break;
case 3:
y= y+1;
break;
}
label5.Text = "Koordinate robota su: " + "x: " + x.ToString() + "y: " + y.ToString();
Problem je u tome sto mi uvek izbaci x= nesto i y=nesto i kada opet unesem 'n' u textbox i kliknem na button on nista ne promeni. Znaci kada jednom ispise da je x=nesto i y= nesto uvek ce tako ostati. Btw u Naredbe textbox se pise samo 1 komanda a ne niz njih (tako je u zadatku)
|
|
|
|
Poslao: 19 Maj 2014 00:22
|
offline
- vasa.93

- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
Problem je u tome što na loš način porediš stringove. Koristi funkciju Equals.
Takođe, ja sam zadatak razumeo drugačije. Dakle, uneseš broj koraka, a zatim uneseš i toliko komandi. Npr. ako uneseš 3 kao broj koraka, u polju "Naredbe" kucaš tri karaktera (npr. "nnn" i robot se pomera tri puta unapred). Treba da koristiš indeksirane promenljive i da čitaš karakter po karakter iz polja Naredbe, a da u zavisnosti od pročitanog karaktera izvršavaš određenu radnju. Dakle, sve treba da se smesti u jednu for petlju koja ide od 0 do broja koraka umanjenog za jedan.
|
|
|
|
Poslao: 19 Maj 2014 09:59
|
offline
- Pridružio: 26 Feb 2012
- Poruke: 113
|
Ne ide meni ovo programiranje... Uradio sam ovako, i sada kada ukucam npr x=1 y=1 i u naredbu stavim NNN on meni ispise da je x = 10 umesto 4, ili npr ako stavim ddn on ispise da je x=-2 umesto 0, znaci umesto da samo jedanput oduzme 1 on 3puta oduzme 1....
private void button1_Click(object sender, EventArgs e)
{
int x = Convert.ToInt32(textBox2.Text);
int y = Convert.ToInt32(textBox3.Text);
string na = Convert.ToString(textBox4.Text);
int smer = 0;
int bkoraka = Convert.ToInt32(textBox1.Text);
int wordCount = na.Length;
for (int naIndex = 0; naIndex < wordCount; naIndex++)
{
char c = na[naIndex];
for (bkoraka = 1; bkoraka <= wordCount; bkoraka++)
{
if (Convert.ToString(c) == "l")
{
smer--;
if (smer < 0)
smer = 3;
if (smer > 3)
smer = 0;
}
if (Convert.ToString(c) == "d")
{
smer++;
if (smer < 0)
smer = 3;
if (smer > 3)
smer = 0;
}
if (Convert.ToString(c) == "n")
{
switch (smer)
{
case 0:
x= x+1;
break;
case 1:
y = y - 1;
break;
case 2:
x = x - 1;
break;
case 3:
y = y + 1;
break;
}
}
}
label5.Text = "Koordinate robota su: " + "x= " + x.ToString() + "y= " + y.ToString();
|
|
|
|
Poslao: 19 Maj 2014 10:04
|
offline
- vasa.93

- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
sloba2424 ::umesto da samo jedanput oduzme 1 on 3puta oduzme 1...Zbog toga sto imas nepotrebno ugnježdene petlje. Za svaki karakter naredbe vršiš samo jednu obradu.
|
|
|
|
Poslao: 19 Maj 2014 10:16
|
offline
- Pridružio: 26 Feb 2012
- Poruke: 113
|
Pa napisao sam da preko if-ova prepozna koji je karakter upisan i na osnovu toga da vrsi radnju za taj karakter, ne razumem zasto to radi vise puta. Inace u skoli smo tek ucili naredbe grananja i ciklusa(delimicno) i ovo je zadatak koji ako uradimo kuci dobijamo 5....
|
|
|
|
Poslao: 19 Maj 2014 12:37
|
offline
- vasa.93

- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
Zbog ovoga ne valja:
for (int naIndex = 0; naIndex < wordCount; naIndex++)
{
//...
for (bkoraka = 1; bkoraka <= wordCount; bkoraka++)
{
//...
}
}
Ako maš recimo tri naredbe (dakle, broj koraka je tri, i u polju Naredbe stoje tri karaktera), za svaku iteraciju spoljne petlje (3 iteracije), ti imaš po 3 iteracije unutrašnje petlje, a to je ukupno 3 * 3 = 9 iteracija.
Sve u svemu, zadatak se može tumačiti na više različitih načina. Broj koraka može da se tumači kao broj naredbi, a može i da se tumači tako da 'D' i 'L' nisu koraci (što praktično i nisu), već da se u korake računa samo kada robot menja poziciju.
Svakako, ako samo izvršavaš naredbe onako kako su zadate (tj. onda kada broj koraka predstavlja broj naredbi), kod bi bio nešto ovako:
privatevoidbutton1_Click(objectsender,EventArgse)
{
int x = Convert.ToInt32(textBox2.Text);
int y = Convert.ToInt32(textBox3.Text);
string na = Convert.ToString(textBox4.Text);
int smer = 0;
int bkoraka = Convert.ToInt32(textBox1.Text);
int wordCount = na.Length;
for(int naIndex = 0; naIndex < wordCount; naIndex++)
{
if(Convert.ToString(c)=="l")
{
smer--;
if(smer<0)
smer=3;
}
if(Convert.ToString(c)=="d")
{
smer = (smer++)%4;
}
if(Convert.ToString(c)=="n")
{
switch(smer)
{
case0: x=x+1;
break;
case1: y=y-1;
break;
case2: x=x-1;
break;
case3: y=y+1;
break;
}
}
}
label5.Text="Koordinate robota su:"+"x="+x.ToString()+"y="+y.ToString();
}
|
|
|
|
Poslao: 22 Maj 2014 10:05
|
offline
- Pridružio: 26 Feb 2012
- Poruke: 113
|
Skontao sam gresku 5min pre polaska u skolu i dobio peticu, hvala na pomoci
|
|
|
|