Zmieniłem troszkę twój program i teraz powinno być ok:
#include <iostream>
using namespace std;
void kierunek(int &x,int &y,int w,int l)
{
switch (w)
{
case 0:
y+=l;
break;
case 1:
y-=l;
break;
case 2:
x-=l;
break;
case 3:
x+=l;
break;
}
}
int main()
{
int t,k, x,y,w,l;
cin>>t;
for(int i=0; i<t; i++)
{
x=0;
y=0;
cin>>k;
for(int j =0; j<k; j++)
{
cin>>w;
cin>>l;
kierunek(x,y,w,l);
}
if(x==0 && y==0) cout<<"studnia"<<endl;
else
{
if(y != 0)
{
if(y >= 0)
cout<<"0 "<<y<<endl;
else
cout<<"1 "<<-y<<endl;
}
if(x != 0)
{
if(x >= 0)
cout<<"3 "<<x<<endl;
else
cout<<"2 "<<-x<<endl;
}
}
}
return 0;
}
i tutaj mniej lub bardziej ważne uwagi
*int x,y,w,l,vy,vx - te zmienne nie muszą być globalne bo w funkcji masz już określone typy (int &x,int &y,int w,int l) więc jak coś nie musi być globalne to nie powinno bo najwyżej mogą być z tego problemy,
*2 razy ustawiasz x i y na 0 - raz wystarczy ;)
*zmienne vx i vy nie są ci do niczego potrzebne bo zauważ, że po pętli for z funkcją gdzie są podawane kolejne dane masz ustawione zmienne x i y na współrzędne celu a studnie na 0 0, więc najprostszą drogą jest sprawdzenie czy ma się na wschód, zachód, północ czy południe o ile i tutaj natrafiamy na zmienioną drugą część programu bo o ile podają ci zmienne x i y, a kierunek ustala ich znak ( y < 0 południe y > 0 północ ...)i tak też to zrobiłem
* a i jeszcze zauważ, jak wpiszesz do twojego programu dane
1
2
0 10
3 10
to będzie on szedł schodkowo do punktu docelowego (wpisz to będziesz wiedział o co mi chodzi), a moja wersja pokaże 0 10
3 10
czyli dwa proste odcinki, droga ta sama, ale nie wiem jak na takie coś zareaguje spoj