Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичні вказівки до практичних робіт.docx
Скачиваний:
33
Добавлен:
07.06.2015
Размер:
3.36 Mб
Скачать

5. Методичні вказівки

1. Формування, друк і обробку двовимірних масивів.

2. Реалізувати масиви як псевдодінамічні.

3. Формування масивів виконати з використанням ДСЧ. В масиви записувати і позитивні, і негативні числа.

6. Зміст звіту

1. Постановка завдання (загальна і для конкретного варіанту).

2. Визначення функцій, використовуваних для формування, друку та обробки масивів (для кожного завдання).

3. Визначення функції main ().

4. Результати тестів.

7. Контрольні запитання

1. Що таке масив? Дайте визначення.

2. В чому переваги представлення інформації у вигляді масиву?

3. Яким чином визначається довжина масиву при його ініціалізації?

Практична робота № 12

Тема: Створення та обробка динамічних масивів за допомогою покажчиків

1. Мета роботи:

1. Отримати практичні навички виділення, перерозподілу і звільнення пам'яті при роботі з динамічними масивами

2. Теоретичні відомості

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

Для створення динамічних змінних використовують операцію new, визначену в C + +:

покажчик = new імя_тіпа [ініціалізатор];

де ініціалізатор - вираз в круглих дужках.

Операція new дозволяє виділити і зробити доступним ділянку динамічної пам'яті, який відповідає заданому типу даних. Якщо задано ініціалізатор, то в цю ділянку буде занесено значення, вказане в Ініціалізатор.

int * x = new int (5);

Для видалення динамічних змінних використовується операція delete, визначена в C + +:

delete покажчик;

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

delete x;

Операція new при використанні з масивами має наступний формат:

new тіп_массіва

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

/ / Виділення динамічної пам'яті 100 * sizeof (int) байт

int * a = new int [100];

При формування матриці спочатку виділяється пам'ять для масиву покажчиків на одномірні масиви, а потім в циклі з параметром виділяється пам'ять під 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;

}

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

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

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

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

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

4. Варіанти

Завдання 12.1 та 12.2

Таблиця 16 – Варіанти завдання 12.1 та 12.2

№ варіанту

одновимірний масив

двовимірний масив

1

Видалити перший парний елемент

Додати рядок із заданим номером

2

Видалити перший негативний елемент

Додати стовпець із заданим номером

3

Видалити перший негативний елемент

Додати рядок в кінець матриці

4

Видалити елемент рівний середньому арифметичному елементів масиву

Додати стовпець в кінець матриці

5

Видалити елемент із заданим номером

Додати рядок в початок матриці

6

Видалити N елементів, починаючи з номера K

Додати стовпець в початок матриці

7

Видалити всі парні елементи

Додати К рядків у кінець матриці

8

Видалити всі елементи з парними індексами

Додати К стовпців в кінець матриці

9

Видалити всі непарні елементи

Додати К рядків в початок матриці

10

Видалити всі елементи з непарними індексами

Додати К стовпців в початок матриці

11

Додати елемент в початок масиву

Видалити рядок з номером К

12

Додати елемент в кінець масиву

Видалити стовпець з номером К

13

Додати К елементів в початок масиву

Видалити рядки, починаючи з рядка К1 і до рядка К2

14

Додати К елементів в кінець масиву

Видалити стовпці, починаючи зі стовпця К1 і до стовпця К2

15

Додати К елементів, починаючи з номера N

Видалити всі парні рядки

16

Додати після кожного негативного елемента його модуль

Видалити всі парні стовпці

17

Додати після кожного парного елемента елемент зі значенням 0

Видалити всі рядки, в яких є хоча б один нульовий елемент

18

Додати по К елементів в початок і в кінець масиву

Видалити всі стовпці, в яких є хоча б один нульовий елемент

19

Додати елемент з номером К

Видалити рядок, в якій знаходиться найбільший елемент матриці

20

Видалити елемент із заданим номером

Додати рядки після кожної парної рядка матриці

21

Видалити N елементів, починаючи з номера K

Додати стовпці після кожного парного стовпця матриці

22

Видалити всі парні елементи

Додати До рядків, починаючи з рядка з номером N

23

Видалити всі елементи з парними індексами

Додати До стовпців, починаючи зі стовпця з номером N

24

Видалити всі непарні елементи

Додати рядок після рядка, що містить найбільший елемент

25

Видалити всі елементи з непарними індексами

Додати стовпець після стовпця, що містить найбільший елемент