При формування матриці спочатку виділяється пам'ять для масиву покажчиків на одномірні масиви, а потім в циклі з параметром виділяється пам'ять під n одновимірних масивів

/ * Виділення динамічної пам'яті під двовимірний динамічний масив * /

int ** form_matr (int n, int m)

{

int ** matr = new int * [n];/ / виділення пам'яті по масив покажчиків

for (int i = 0; i <n; i + +)

/ / Виділення пам'яті 100 * sizeof (int) байт для масиву значень

matr [i] = new int [m];

Return matr;/ / повертаємо вказівник на масив покажчиків

*matr[0] *matr[1] *matr[2] ….. *matr[n]

Рисунок – Виділення пам'яті під двовимірний масив

Змінювати значення покажчика на динамічний масив треба акуратно, тому що цей покажчик потім використовується при звільненні пам'яті за допомогою операції delete.

/ * Звільняє пам'ять, виділену під масив, якщо а адресує його початок */

delete [] a;

Видалення з динамічної пам'яті двовимірного масиву здійснюється в порядку зворотному його створення, тобто спочатку звільняється пам'ять, виділена під одномірні масиви з даними, а потім пам'ять, виділена під одновимірний масив покажчиків.

int find (int ** matr, int m, int I)

{

for (int i = 0; i <m; i + +)

if (matr [I] [i] <0) return 1;

return 0;

}

При видаленні з динамічної матриці рядків або стовпців створюється нова матриця потрібного розміру, в яку переписуються дані зі старої матриці. Потім стара матриця видаляється.

int ** del (int ** matr, int & n, int m)

{/ / Видалення парних рядків

int k = 0, t = 0;

for (int i = 0; i <n; i + +)

if (i% 2! = 0) k + +;/ / кількість непарних рядків

/ / Виділяємо пам'ять під нову матрицю

int ** matr2 = form_matr (k, m);

for (i = 0; i <n; i + +)

if (i% 2! = 0)

{

/ / Якщо рядок непарна, то переписуємо її в нову матрицю

for (int j = 0; j <m; j + +)

matr2 [t] [j] = matr [i] [j];

t + +;

}

n = t;/ / змінюємо кількість рядків

/ / Повертаємо покажчик на нову матрицю як результат функції

return matr2;

}

Постановка завдання

Сформувати динамічний одновимірний масив, заповнити його випадковими числами і вивести на друк.

Виконати вказану у варіанті завдання і вивести отриманий масив на друк.

Сформувати динамічний двовимірний масив, заповнити його випадковими числами і вивести на друк.

Виконати вказану у варіанті завдання і вивести отриманий масив на друк.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: