Копирование элементов двумерного массива в одномерный - C (СИ)

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

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

Значения элементов двумерного массива из m строк и n столбцов скопировать в одномерный масси размером m*n. Копирование проводить: а)по строкам, начиная с первой (а в нем - с крайнего лвеого эл-та) б)по столбцам начиная с первого (а в нем - с самого верхнего эл-та) написал начало программы, а дальше не знаю как. Можете объяснить, как делать дальше:
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int m,n,i,j;
  6. printf("Vvedite razmer massiva");
  7. scanf("%d",&n);
  8. scanf("%d",&m);
  9. int **a=(int**)malloc(sizeof(int**)*n);
  10. for(i=0;i<n;i++)
  11. {
  12. a[i]=(int*)malloc(sizeof(int*)*m);
  13. }
  14. for(i=0;i<n;i++)
  15. {
  16. for(j=0;j<m;j++)
  17. {
  18. a[i][j]=rand()%10;
  19. printf(" %d",a[i][j]);
  20. }printf("\n");
  21. }
  22. int *p;
  23. p=(int *)malloc(sizeof(int *));
  24. for(i=0;i<n;i++)
  25.  
  26. return 0;
  27. }

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

textual
Листинг программы
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <time.h>
  5.  
  6. int main(void)
  7. {
  8.   int** a = NULL;
  9.   int* b = NULL;
  10.  
  11.   int i = 0;
  12.   int j = 0;
  13.   int cnt = 0;
  14.   int flag = 0;
  15.  
  16.   const int N = 3;
  17.   const int M = 4;
  18.  
  19.   srand(time(NULL));
  20.  
  21.   a = malloc(M * sizeof(*a));
  22.   b = malloc(M * N * sizeof(*b));
  23.  
  24.   if ((a != NULL) && (b != NULL))
  25.   {
  26.     i = 0;
  27.     cnt = 0;
  28.     flag = 1;
  29.  
  30.     while ((i < M) && flag)
  31.     {
  32.       a[i] = malloc(N *  sizeof(**a));
  33.  
  34.       if (a[i] == NULL)
  35.       {
  36.         flag = 0;
  37.       }
  38.       cnt++;
  39.       i++;
  40.     }
  41.  
  42.     if (!flag)
  43.     {
  44.       for(i = cnt - 1; i > -1; i--)
  45.       {
  46.         free(a[i]);
  47.       }
  48.     }
  49.     else
  50.     {
  51.       for(i = 0; i < M; i++)
  52.       {
  53.         for(j = 0; j < N; j++)
  54.         {
  55.           a[i][j] = rand() % 10;
  56.           printf("%2d ", a[i][j]);
  57.         }
  58.         printf("\n");
  59.       }
  60.       printf("\n");
  61.  
  62.       for(i = 0; i < M; i++)
  63.       {
  64.         memcpy(&b[i * N], &a[i][0], N * sizeof(*b));
  65.       }
  66.  
  67.       for(i = 0; i < (M * N); i++)
  68.       {
  69.         printf("%2d ", b[i]);
  70.       }
  71.       printf("\n");
  72.  
  73.       for(i = 0; i < M; i++)
  74.       {
  75.         free(a[i]);
  76.       }
  77.     }
  78.   }
  79.  
  80.   free(a);
  81.   free(b);
  82.  
  83.   return 0;
  84. }

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

Код начинается с объявления двух указателей на двумерный массив (int* a) и одномерный массив (int b). Затем объявляются переменные для управления циклом: i, j, cnt и flag. Далее определяются константы N и M, которые представляют собой размеры массивов. Затем производится инициализация генератора случайных чисел. Следующий блок кода выделяет память под двумерный массив (a) и одномерный массив (b). Если память успешно выделена, то флаг устанавливается в 1. Если произошла ошибка выделения памяти, то флаг устанавливается в 0. Далее следует цикл, который заполняет двумерный массив случайными числами от 0 до 9. Затем происходит копирование элементов из двумерного массива в одномерный. После этого двумерный массив освобождается от выделенной под него памяти, а затем и одномерный массив. Код завершается возвратом 0, что означает успешное выполнение программы.

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


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

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

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

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

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

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