Cykliczna funkcja przesuwająca elementy tablicy.

0

Napisz funkcję, która cyklicznie przesuwa w prawo elementy tablicy o zadaną liczbę. Na przykład dla tablicy {1, 2, 3, 4, 5, 6} i przesunięcia 2 tablica powinna wyglądać: {5, 6, 1, 2, 3, 4}.
Wyświetlają mi się tylko 4 liczby dlaczego ?

 #include <stdio.h>
void f(int tab[], int n, int size)
{
    int i, x;
    for (i = 1; i <= n; ++i)
        x = tab[size] - 1;
    for (i = size; i >= n; i--)
        
    {
        tab[1] = tab[i - 1];
        tab[0] = x;
        printf("%d\n", tab[i]);
    }
}
int main()
{
    int tab[] = { 1, 2, 3, 4, 5, 6 };
    f(tab, 2, 5);
    return 0;
}
0
    for (i = 1; i <= n; ++i)
        x = tab[size] - 1;
 

Moze od poczatku: co ta czesc ma robic ? Nie probuje myslec nad tym ale ta petla jest tu zbedna chyba

EDIT:
Jesli chodzilo ci inkrementowanie klucza to pierwszy element to tab[0] taka podstawa podstaw

EDIT2:
Jezeli size oznacza wielkosc tablicy to powinienes podawac gwoli ścisłości 6, a nie 5

0
x = tab[size] - 1; 

oblicza liczbe ktora ma stać na pierwszym miejscu tablicy po przesunięciu dlatego potem napisane jest tab[0] = x;

 racja tam powinienem wstawic 6 zamiast 5 ale dalej nie wiem co skiepściłem bo na 1 miejscu wyświetla mi 0, wgl źle wyświetla liczby ;(
0

Może tylko dlatego że ustawiasz tylko 2 elementy tablicy na nie wiadomo jaką wartość :P ?

 
    tab[1] = tab[i - 1];
        tab[0] = x;

To wszystko co ustawiasz, gdzie tab[0] wynosi tutaj tab[size=5]-1 =6 -1 = 5 ,a tab[1] = tab[n-1] = tab[1] = 2 zacznij od nowa, dla mnie cale jest zle ale nadal moge sie mylic ;p

EDIT: na dodatek wyswietlasz wszystko w jakims losowym momencie tym printf'em

0

Zrobiłem jeszcze raz inaczej ale już całkiem mi się pomieszało jakas podpowiedz?;p

 #include <stdio.h>
void f(int tab[], int size, int n)
{
    int i;
    for (i = 0; i < n; ++i) {
        tab[0] = size - 1;
        tab[1] = size;
    }
    for (i = size; i > n; i--) {
        tab[i] = tab[i - n];
    }
    printf("%d", tab[i]);
}
int main()
{
    int tab[] = { 1, 2, 3, 4, 5, 6 };
    f(tab, 6, 2);
    return 0;
}
0

Może rozpisz jakiś algorytm ? Tylko pomyśl nad wszystkimi przypadkami pisząc go np przypadek taki:

f(tab,6,100);

Jak będzie wyglądało wtedy obliczanie wyrazów, które znajdą się na początku

0

nie wiem jak juz

0

Jak zrobisz sobie rysunek dla n=1, dla n=2, dla n=3, dla n=size, dla n=size+1
To poradzisz sobie z tym zadaniem bez problemów.

0

Tak powinno byc?

 for(i=n;i<=size-1;i++)
  tab[i]=tab[i+n];
  for(i=0;i<=n;i++)
  tab[0]=tab[i-1];
  tab[1]=size-1;
0

Nie.
Programowanie metodą prób i błędów z góry skazane na porażkę.
Zrób sobie rysunki.

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