Тема: Масив чисел

Що потрібно змінити в коді, щоб масив чисел зміщало не вправо, а вліво?

#include <stdio.h>

int main() {
    int arr[] = { 1, 2, 3, 4, 5 };
    int l = sizeof(arr) / sizeof(arr[0]);
    int n = 2;
    printf("Original array: \n");
    for (int i = 0; i < l; i++) {
        printf("%d ", arr i);
    }
    for (int i = 0; i < n; i++) {
        int j, last;
        last = arr[l - 1];
        for (j = l - 1; j > 0; j--) {
            arr[j] = arr[j - 1];
        }
        arr[0] = last;
    }
    printf("\n");
    printf("Array after right rotation: \n");
    for (int i = 0; i < l; i++)
        printf("%d ", arr i);
    return 0;
}

2

Re: Масив чисел

А нащо вам потрібно, щоб зсувало в інший бік?

3

Re: Масив чисел

Хочу спробувати різні варіанти, але не компілюється, не розумію помилку

4

Re: Масив чисел

То покажіть код, що не компілюється, і скопіюйте помилку. Залюбки поясню, в чому проблема.

5

Re: Масив чисел

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
    int arr[] = { 1, 2, 3, 4, 5 };
    int l = sizeof(arr) / sizeof(arr[0]);
    int n = 2;
    printf("Original array: \n");
    for (int i = 0; i < l; i++) {
        printf("%d ", arr i);
    }
    for (int i = 0; i < n; i++) {
        int j, last;
        last = arr[l + 1];
        for (j = l + 1; j > 0; j--) {
            arr[j] = arr[j + 1];
        }
        arr[0] = last;
    }
    printf("\n");
    printf("Array after right rotation: \n");
    for (int i = 0; i < l; i++)
        printf("%d ", arr i);
    return 0;
}

Я наче зрозуміла, але в результаті, після переміщення вліво, всі числа стають 5

6

Re: Масив чисел

ykrop20051990 написав:

після переміщення вліво, всі числа стають 5

Тому що ви спершу копіюєте, а потім переходите до вже скопійованого значення. Змініть або напрямок циклу, або напрямок копіювання. Ну і цикл по i узагалі не потрібен, а останній елемент у масиві з l значень - це ніяк не arr[l+1].

int last = arr[l-1];
for(int j=l-1;j>0;j--) { //цикл з більшого до меншого
    arr[j]=arr[j-1]; //копіюємо з меншого до більшого
}
arr[0] = last;
Подякували: leofun011