Получить новые массивы путем сдвига элементов в массивах на два разряда вправо - C (СИ)

Узнай цену своей работы

Формулировка задачи:

даны массивы A[1..5], B[1..6]. Получит новые массивы путем сдвига элементов в массивах на два разряда вправо, освободившиеся слева элементы обнулить.Сдвиг элементов в массивах оформить подпрограммой, из подпрограммы вернуть выпавшие справа разряды. Код недоделан и с ошибками, прошу помощи исправить и доделать.
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <math.h>
  5. int sdvig(int d[], int n, int k, int d1[])
  6. {
  7. int i, j;
  8. for(j=0; j<k; j++)
  9. {
  10. d1[0]=0;
  11. for(i=0; i<n-1; i++)
  12. d1[i+1]=d[i];
  13. for(i=0; i<n; i++)
  14. d[i]=d1[i];
  15. }
  16. return 0;
  17. }
  18. int main()
  19. {
  20. int q, s=2;
  21. int A[5]={56,45,21,35,98};
  22. int B[6]={3,8,9,24,16,28};
  23. printf("Pervonachalnye massivy:\n");
  24. printf("Massiv A: ");
  25. for(q=0; q<5; q++)
  26. printf("%5d",A[q]);
  27. printf("\n");
  28. printf("Massiv B: ");
  29. for(q=0; q<6; q++)
  30. printf("%5d",B[q]);
  31. printf("\n");
  32. printf("Sdvinutye massivy: \n");
  33. printf("Massiv B: ");
  34. sdvig(A,s,q,a1);
  35. }

Решение задачи: «Получить новые массивы путем сдвига элементов в массивах на два разряда вправо»

textual
Листинг программы
  1. #define N1 5
  2. #define N2 6
  3.  
  4. void shl(int* pn, int n, int pos, int* pv);
  5.  
  6. int main()
  7. {
  8.     int A[N1] = { 3, 4, 1, 2, 9 };
  9.     int B[N2] = { 6, 8, 3, 5, 1, 7 };
  10.    
  11.     int C1[2],C2[2];
  12.  
  13.     shl(A,N1,2,C1);
  14.     shl(B,N2,2,C2);
  15.  
  16.     for (int z1 = 0; z1 < N1; z1++)
  17.         printf("%d ",A[z1]);
  18.     printf("\n");
  19.  
  20.     for (int q1 = 0; q1 < 2; q1++)
  21.         printf("%d ",C1[q1]);
  22.     printf("\n");
  23.  
  24.     for (int z2 = 0; z2 < N2; z2++)
  25.         printf("%d ",B[z2]);
  26.     printf("\n");
  27.  
  28.     for (int q2 = 0; q2 < 2; q2++)
  29.         printf("%d ",C2[q2]);
  30.     printf("\n");
  31.  
  32.     return 0;
  33. }
  34.  
  35. void shl(int* pn, int n, int pos, int* pv)
  36. {
  37.     int k = 0;
  38.     while (--pos >= 0)
  39.     {
  40.         int i = n-1; pv[k++] = pn[i];
  41.         while (i >= 1) pn[i--] = pn[i-1];
  42.     }
  43.  
  44.     int q = 0; while (q < k) pn[q++] = 0;
  45. }

Объяснение кода листинга программы

  1. Объявлены массивы A и B, а также массивы C1 и C2.
  2. Вызваны функции shl для сдвига элементов массивов A и B на два разряда вправо в массивы C1 и C2 соответственно.
  3. Выведены элементы массива A.
  4. Выведены элементы массива C1.
  5. Выведены элементы массива B.
  6. Выведены элементы массива C2.
  7. В функции shl происходит сдвиг элементов массива на два разряда вправо с использованием циклов while и индексации.
  8. При сдвиге элементов, в освободившиеся ячейки записывается ноль.
  9. В функции main, массивы C1 и C2 объявлены как массивы длиной 2, что позволяет хранить в них результаты сдвига элементов массивов A и B.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы