Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <strings.h>
- #include <stdlib.h>
- #include <sys/types.h>
- int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
- const int arrlen = sizeof(arr) / sizeof(int);
- void dump(int a[], size_t nmemb)
- {
- register int i;
- for(i = 0; i < nmemb; i++)
- printf("%s%d", i ? ", " : "", a[i]);
- printf("\n");
- }
- void shift(int a[], size_t nmemb, int dst)
- {
- int left = dst < 0;
- dst = abs(dst) % nmemb;
- printf("SHIFT: nmemb=%d ; dst=%d ; left=%d\n", nmemb, dst, left);
- if(dst)
- {
- int b[dst];
- if(left)
- {
- bcopy(a, b, dst * sizeof(int));
- bcopy(&a[dst], a, (nmemb - dst) * sizeof(int));
- bcopy(b, &a[nmemb - dst], dst * sizeof(int));
- }
- else
- {
- bcopy(&a[nmemb - dst], b, dst * sizeof(int));
- bcopy(a, &a[dst], (nmemb - dst) * sizeof(int));
- bcopy(b, a, dst * sizeof(int));
- }
- }
- }
- int main(int argc, char *argv[])
- {
- printf("START:");
- dump(arr, arrlen);
- shift(arr, arrlen, 4);
- dump(arr, arrlen);
- shift(arr, arrlen, -4);
- dump(arr, arrlen);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement