Czesc, prosze o pomoc bo sam nie moge znalezc gdzie tkwi problem.
Mamy n elementowa tablice, naszym zadaniem jest przesunac wybrane elementy tablicy o k elementow. Gdy k<0 to przesuwamy elementy w lewo. Niech b bedzie poczatkowym elementem do przesuniecia a e koncowym oraz k informuje o ile przesuwamy.
Problem pojawia sie gdy interesujacy nas obszar wykracza po za zakres czyli mamy elementy: data[n-1] data[n] data[0] data[1] data[2].
W pozostalych przypadkach moj kod jest poprawny.
Sytuacja gdy k < 0 i przesuwamy w lewo:
if (b>e){
schowek = e;
e = b;
b = schowek;
}
k = k * -1;
if (b+k>n-1 || e+k>n-1) {
dlugoscFragmentu = n - b + e + 1;
iloscRozkazow = k / dlugoscFragmentu;
iloscRozkazow = iloscRozkazow * dlugoscFragmentu;
iloscRozkazow = k - iloscRozkazow;
for (int i=0; i<iloscRozkazow; i++){
schowek = data[b];
for (int j=b;j<=e-1;j++) data[j] = data[j+1];
data[e] = schowek;
}
}
Sytuacja gdy k >=0 i przesuwamy w prawo:
if (b+k>n-1 || e+k>n-1) {
dlugoscFragmentu = n - b + e + 1;
iloscRozkazow = k / dlugoscFragmentu;
iloscRozkazow = iloscRozkazow * dlugoscFragmentu;
iloscRozkazow = k - iloscRozkazow;
for (int i=0;i<iloscRozkazow;i++){
schowek = data[e];
for (int j=e-1;j>=b;j--) data[j+1] = data[j];
data[b] = schowek;
}