Получить новые массивы путем сдвига элементов в массивах на два разряда вправо - C (СИ)
Формулировка задачи:
даны массивы A[1..5], B[1..6]. Получит новые массивы путем сдвига элементов в массивах на два разряда вправо, освободившиеся слева элементы обнулить.Сдвиг элементов в массивах оформить подпрограммой, из подпрограммы вернуть выпавшие справа разряды.
Код недоделан и с ошибками, прошу помощи исправить и доделать.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
int sdvig(int d[], int n, int k, int d1[])
{
int i, j;
for(j=0; j<k; j++)
{
d1[0]=0;
for(i=0; i<n-1; i++)
d1[i+1]=d[i];
for(i=0; i<n; i++)
d[i]=d1[i];
}
return 0;
}
int main()
{
int q, s=2;
int A[5]={56,45,21,35,98};
int B[6]={3,8,9,24,16,28};
printf("Pervonachalnye massivy:\n");
printf("Massiv A: ");
for(q=0; q<5; q++)
printf("%5d",A[q]);
printf("\n");
printf("Massiv B: ");
for(q=0; q<6; q++)
printf("%5d",B[q]);
printf("\n");
printf("Sdvinutye massivy: \n");
printf("Massiv B: ");
sdvig(A,s,q,a1);
}Решение задачи: «Получить новые массивы путем сдвига элементов в массивах на два разряда вправо»
textual
Листинг программы
#define N1 5
#define N2 6
void shl(int* pn, int n, int pos, int* pv);
int main()
{
int A[N1] = { 3, 4, 1, 2, 9 };
int B[N2] = { 6, 8, 3, 5, 1, 7 };
int C1[2],C2[2];
shl(A,N1,2,C1);
shl(B,N2,2,C2);
for (int z1 = 0; z1 < N1; z1++)
printf("%d ",A[z1]);
printf("\n");
for (int q1 = 0; q1 < 2; q1++)
printf("%d ",C1[q1]);
printf("\n");
for (int z2 = 0; z2 < N2; z2++)
printf("%d ",B[z2]);
printf("\n");
for (int q2 = 0; q2 < 2; q2++)
printf("%d ",C2[q2]);
printf("\n");
return 0;
}
void shl(int* pn, int n, int pos, int* pv)
{
int k = 0;
while (--pos >= 0)
{
int i = n-1; pv[k++] = pn[i];
while (i >= 1) pn[i--] = pn[i-1];
}
int q = 0; while (q < k) pn[q++] = 0;
}
Объяснение кода листинга программы
- Объявлены массивы A и B, а также массивы C1 и C2.
- Вызваны функции shl для сдвига элементов массивов A и B на два разряда вправо в массивы C1 и C2 соответственно.
- Выведены элементы массива A.
- Выведены элементы массива C1.
- Выведены элементы массива B.
- Выведены элементы массива C2.
- В функции shl происходит сдвиг элементов массива на два разряда вправо с использованием циклов while и индексации.
- При сдвиге элементов, в освободившиеся ячейки записывается ноль.
- В функции main, массивы C1 и C2 объявлены как массивы длиной 2, что позволяет хранить в них результаты сдвига элементов массивов A и B.