Przesunięcie tablicy w prawo o daną liczbę

0

Próbuje napisać program który przesunie funkcje o 2 miejsce w prawo lecz nie moge sobie porawdzic z petalami ktos pomoze?

 #include <stdio.h>
void f(int t[], int size)
{
    int i, x;

    for (i = 1; i <= size; i++) {
        x = t[size - 1];
        for (i = size - 1; i > 0; i--) {
            t[i] = t[i - 1];
            t[0] = x;
            printf("%d", t[i]);
        }
    }
}
int main()
{
    int t[] = { 1, 2, 3, 4, 5, 6 };
    f(t, 6);
    return 0;
}
0

a algorytm jest dobry czy tez zly ?

0

Jeżeli działa dla sporej ilości testów to jest szansa że jest dobry.
Jeżeli nie działa przynajmniej dla jednego testu - na 100% jest zły.

0

no wlasnie wiem tylko nie moge sprawdzic czy działą bo z petla cos skopalem i mi sie nie zamyka

0

Programowanie metodą prób i błędów z góry skazane na porażkę, zacznij od zrobienia rysunku.

0

Poprawiłem jak umiałem wydaje mi sie to logiczne ale nie rozumiem dlaczego wyswietlaja mi sie 654377. Skad ta 6 na poczatku skoro przypisalem

t[0] = x;
        t[1] = x + 1;

i dlaczego na koncu pokazuja mi sie 7 ?

void f(int t[], int size)
{
    int i, x, przes = 2;
    for (i = 0; i < size; i++) {
        x = t[size - 1];
    }
    for (i = size; i > 0; i--) {
        t[i] = t[i - 1];
        t[0] = x;
        t[1] = x + 1;
        printf("%d", t[i]);
    }
}
int main()
{
    int t[] = { 1, 2, 3, 4, 5, 6 };
    f(t, 6);
    return 0;
} 
0

Którego słowa w tym zdaniu: - http://4programmers.net/Forum/1086226 - nie zrozumiałeś?

0

zrozumialem wszystko nie robie juz metoda prob i bledow zrobilem rysunek i wydaje mi sie ze wszystko pasuje ale program mowi mi inaczej wiec tak nie jest utknalem nie wiem dlaczego cos jest zle dlatego prosze o pomoc nie chcesz nie musisz mi pomagac

0

Przecież nic a nic na tym rysunku nie widzisz!
77d50c15fc.png

0

\wszystko co potrzebowalem mam tam zaznaczone algorytm na tab[i] po przesunieciu i mam przypisany x i x+1 do t[0] i t[1]

1

Załóżmy, że mamy funkcję:

void reverse(int * a, int n);

która odwraca tablicę.

Wtedy funkcja przesuwająca tablicę o s elementów w prawo będzie wyglądać tak:

void shift(int * a, int n, int s) {
  int rs = n ? s % n : 0;
  reverse(a, n);
  reverse(a, rs);
  reverse(a + rs, n - rs);
}

Modulo wyciągam po to, żeby w sytuacji, gdy ktoś zachce przekręcić 5 elementową tablicę o 13 elementów w prawo też zadziałało i przesunęło o 3 elementy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1