Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <time.h>
- #include <iomanip>
- int **createArray2dFrag(size_t a, size_t b);
- void freeArray2dFrag(int **m, size_t a, size_t b);
- int **createArray2d(size_t a, size_t b);
- void freeArray2d(int **m, size_t a, size_t b);
- void freeArray2d(int **m);
- void setArray2d(int **m, size_t a, size_t b, int value);
- int **initArray2d(size_t a, size_t b);
- void setRandArray2d(int **m, size_t a, size_t b, int min, int max);
- void showArray2d(int **m, size_t a, size_t b, int wide);
- int **transpose(const int * const * m, size_t rows, size_t cols);
- void swap_min(int *m[], unsigned rows, unsigned cols);
- int main()
- {
- setlocale(0, "Russian");
- srand(time(NULL));
- int N = 5, M = 3;
- int x = 0;
- int **arr;
- arr = initArray2d(N, M);
- setRandArray2d(arr, N, M, -10, 10);
- showArray2d(arr, N, M, 4);
- system("pause");
- int **arrT;
- arrT = transpose(arr, N, M);
- showArray2d(arrT, M, N, 4);
- freeArray2d(arrT);
- system("pause");
- return 0;
- }
- //Функция создания двумерного массива. Неэффективна из-за большого количества вызовов
- //дорогостоящего оператора new и из-за высокой степени фрагментации памяти
- int ** createArray2dFrag(size_t a, size_t b)
- {
- int **m = new int *[a];
- for (size_t i = 0; i < a; i++)
- {
- m[i] = new int[b];
- }
- return m;
- }
- //Функция очищения памяти
- void freeArray2dFrag(int **m, size_t a, size_t b)
- {
- for (size_t i = 0; i < a; i++)
- delete[] m[i];
- delete[] m;
- }
- //Более эффективная функция создания двумерного динамического массива
- int ** createArray2d(size_t a, size_t b)
- {
- int **m = new int *[a];
- m[0] = new int[a*b];
- for (size_t i = 1; i < a; i++)
- m[i] = m[i-1] + b;
- return m;
- }
- //Более эффективная функция очищения памяти
- void freeArray2d(int **m, size_t a, size_t b)
- {
- delete[] m[0];
- delete[] m;
- }
- void freeArray2d(int **m)
- {
- delete[] m[0];
- delete[] m;
- }
- //Функция, инициализирующая двумерный массив нулями
- void setArray2d(int **m, size_t a, size_t b, int value)
- {
- for (size_t i = 0; i < a; i++)
- {
- for (size_t j = 0; j < b; j++)
- m[i][j] = value;
- }
- }
- //Функция, инициализирующая двумерный массив случайными значениями от min до max включительно
- void setRandArray2d(int **m, size_t a, size_t b, int min, int max)
- {
- for (size_t i = 0; i < a; i++)
- {
- for (size_t j = 0; j < b; j++)
- m[i][j] = rand()%(max - min + 1) + min;
- }
- }
- //Функция, выводящая массив на экран в виде таблицы с шириной поля wide
- void showArray2d(int **m, size_t a, size_t b, int wide)
- {
- for (size_t i = 0; i < a; i++)
- {
- for (size_t j = 0; j < b; j++)
- std::cout << std::setw(wide) << m[i][j] << " ";
- std::cout << std::endl;
- }
- }
- //Функция, создающая двумерный динамический массив и сразу инициализирующая его нулями
- int **initArray2d(size_t a, size_t b)
- {
- int **arr;
- arr = createArray2d(a, b);
- setArray2d(arr, a, b, 0);
- return arr;
- }
- //Функция, принимающая матрицу m : dim(m) = rows x cols и возвращающая транспонированную матрицу, соответствующую данной
- int **transpose(const int * const * m, size_t rows, size_t cols)
- {
- int **mT = initArray2d(cols, rows);
- size_t a = cols;
- size_t b = rows;
- for (size_t i = 0; i < a; i++)
- {
- for (size_t j = 0; j < b; j++)
- mT[i][j] = m[j][i];
- }
- return mT;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement