Advertisement
dllbridge

Untitled

May 29th, 2023
866
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.12 KB | None | 0 0
  1.  
  2.  
  3. #include  <stdio.h>
  4. #include <stdlib.h>
  5. #include <locale.h>
  6.  
  7.  
  8. int      M,   //  Кол-во строк  
  9.          N,   //  ... столбцов
  10.        *pA,   //  Указатель на массив "A"
  11.        *pB;   //  Указатель на массив "B"
  12.  
  13. void   initMatrix();  
  14. void   convertArray_1D_to2D(int *p, int n1, int n2);
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23. ///////////////////////////////////////////////////////////
  24. int main()                                               //
  25. {
  26.    
  27.    
  28.    
  29.    
  30.     setlocale(LC_ALL, "RUS");
  31.     printf("Введите размер матрицы M строк и N столбцов: "); scanf("%d%d", &M, &N); printf("\n");
  32.    
  33.     //M = 3; N = 5;                                //  Можете закомментировать строку выше, а эту раскомментировать.
  34.    
  35.     int nSize = 2 * N * M * sizeof(int);                     //                Размер СРАЗУ! двух матриц (в байтах)
  36.    
  37.     pA = (int*)malloc(nSize);  
  38.                                   //  Резервируем в памяти место сразу для двух массивов
  39.     pB = &pA[N * M];
  40.    
  41.    
  42.     initMatrix();
  43.    
  44.     printf("\t\t\tВид матрицы A:\n");    convertArray_1D_to2D(pA, M, N);
  45.     printf("\t\t\tВид матрицы B:\n");    convertArray_1D_to2D(pB, M, N);
  46.    
  47.     free(pA);                                      //  Освободим память, которая выделялась сразу для двух массивов.
  48.    
  49. return 0;
  50. }
  51.  
  52.  
  53. //  Инициализируем массивы без преобразования их в двумерные.
  54. //////////////////////////////////////////////////////////////
  55. void initMatrix()                                           //  
  56. {
  57.        
  58.     int i,  j,
  59.         n = 1;
  60.        
  61.     for(i = 0; i < M; i++)
  62.     {
  63.         for(j = 0; j < N; j++)  pA[i*N + j] = n++;      
  64.     }
  65.                                             n = 1;
  66.     for(j = 0; j < N; j++)    
  67.     for(i = 0; i < M; i++)      pB[i*N + j] = n++;  
  68. }
  69.  
  70.  
  71. //  n1 - это количество строк
  72. //  n2 -     кол-во  столбцов
  73. //////////////////////////////////////////////////////////////
  74. void convertArray_1D_to2D(int *p, int n1, int n2)           //  
  75. {
  76.    
  77.     int *a[n1],                                             //                              Создаём массив указателей.
  78.             i ,                                             //                             Счётчик строк от 0 до n1-1
  79.             j ;                                             //                  Счётчик позицый в строке от 0 до n2-1            
  80.    
  81.     for(i = 0; i < n1; i++)  a[i] = &p[i*n2];               //                               Завершили преобразование
  82.    
  83.                                        // - - - - - - - - - //
  84.    
  85.     for(i = 0; i < n1; i++)
  86.     {                                //    строки    
  87.         for(j = 0; j < n2; j++)  {
  88.                
  89.             printf("%3d", a[i][j]);
  90.         }   printf("\n");
  91.     }
  92. }
  93.  
  94.  
  95.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement