Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- int M, // Кол-во строк
- N, // ... столбцов
- *pA, // Указатель на массив "A"
- *pB; // Указатель на массив "B"
- void initMatrix();
- void convertArray_1D_to2D(int *p, int n1, int n2);
- ///////////////////////////////////////////////////////////
- int main() //
- {
- setlocale(LC_ALL, "RUS");
- printf("Введите размер матрицы M строк и N столбцов: "); scanf("%d%d", &M, &N); printf("\n");
- //M = 3; N = 5; // Можете закомментировать строку выше, а эту раскомментировать.
- int nSize = 2 * N * M * sizeof(int); // Размер СРАЗУ! двух матриц (в байтах)
- pA = (int*)malloc(nSize);
- // Резервируем в памяти место сразу для двух массивов
- pB = &pA[N * M];
- initMatrix();
- printf("\t\t\tВид матрицы A:\n"); convertArray_1D_to2D(pA, M, N);
- printf("\t\t\tВид матрицы B:\n"); convertArray_1D_to2D(pB, M, N);
- free(pA); // Освободим память, которая выделялась сразу для двух массивов.
- return 0;
- }
- // Инициализируем массивы без преобразования их в двумерные.
- //////////////////////////////////////////////////////////////
- void initMatrix() //
- {
- int i, j,
- n = 1;
- for(i = 0; i < M; i++)
- {
- for(j = 0; j < N; j++) pA[i*N + j] = n++;
- }
- n = 1;
- for(j = 0; j < N; j++)
- for(i = 0; i < M; i++) pB[i*N + j] = n++;
- }
- // n1 - это количество строк
- // n2 - кол-во столбцов
- //////////////////////////////////////////////////////////////
- void convertArray_1D_to2D(int *p, int n1, int n2) //
- {
- int *a[n1], // Создаём массив указателей.
- i , // Счётчик строк от 0 до n1-1
- j ; // Счётчик позицый в строке от 0 до n2-1
- for(i = 0; i < n1; i++) a[i] = &p[i*n2]; // Завершили преобразование
- // - - - - - - - - - //
- for(i = 0; i < n1; i++)
- { // строки
- for(j = 0; j < n2; j++) {
- printf("%3d", a[i][j]);
- } printf("\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement