Составить 2 функции. Одна из функций циклически сдвигает массив длины N вправо на k позиций, а другая - на k позиций вле - C (СИ)
Формулировка задачи:
Составить 2 функции. Одна из функций циклически сдвигает массив длины N вправо на k позиций, а другая - на k позиций влево.
1. Составить функцию с оператором return.
2. Преобразовать функцию к void-функции, составленную в рамках языка С.
3. Преобразовать функцию к void-функции, использующую возможно*сти языка C++.
Решение задачи: «Составить 2 функции. Одна из функций циклически сдвигает массив длины N вправо на k позиций, а другая - на k позиций вле»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void shift_left (int* a, const int n, int k) // сдвиг влево
{
if (k<0) return;
int i, f, t, m = n-1;
if (k>n) k %= n;
for (i=0; i<k; i++)
{
t = a[0];
for (f = 1; f<n; f++)
a[f-1] = a[f];
a[m] = t;
}
}
int main (void)
{
srand(time(NULL)); // точка отсчета рнд
const int n = 6; // размер массива
int a[n]; // массив
int i, k;
for (i=0; i<n; i++)
{
a[i] = rand() %n; // заполняем массив случайными
printf("%4d", a[i]); // выводим на экран
}
printf("\n");
printf("input K, please: "); // узнаем величину сдвига влево
scanf("%i", &k);
shift_left(a, n, k); // сдвигаем влево на k позиций
for (i=0; i<n; i++) // массив снова на экран
printf("%4d", a[i]);
printf("\n");
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем функцию
shift_left, которая принимает три аргумента: указатель на массив, его размер и величину сдвига. Функция осуществляет сдвиг элементов массива влево на указанное количество позиций - В функции
mainгенерируем случайные значения для массива с помощью функцииrand(). Выводим массив на экран - Запрашиваем у пользователя величину сдвига с помощью функции
scanf(). Осуществляем сдвиг элементов массива с помощью функцииshift_left() - Выводим массив после сдвига на экран
- Возвращаем 0, чтобы указать на успешный конец работы программы