Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мет_1 часть_укр.doc
Скачиваний:
2
Добавлен:
09.11.2019
Размер:
1.41 Mб
Скачать
  1. Постановка задачі.

  2. Варіант завдання.

  3. Код програми.

  4. Скріншот вікна з результатами обчислень.

7. Лабораторна робота 6. «Динамічні одновимірні масиви» (4 год.)

Ціль роботи: Навчитися створювати й видаляти динамічні масиви, ініціалізувати масив випадковими числами. Одержати навички вставки й видалення елементів із масиву, прийоми парних і циклічних перестановок елементів і ін.

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

7.1.1. Динамічні масиви

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

int n=20;

float *a = new float[n];

Обнулювання пам'яті при її виділенні не відбувається. Ініціалізувати динамічний масив не можна. Звертання до елемента динамічного масиву здійснюється так само, як і звертання до елемента звичайного, наприклад, a[5] або *(a+5).

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

delete [] a;

Квадратні дужки для видалення масиву обов'язкові, розмір масиву не вказується.

7.1.2. Масив випадкових чисел

Присвоювання елементам масиву випадкових цілих чисел виконується функцією rand. Ця функція доступна із заголовного файлу stdlib.h. Вираз

rand()%rmax

повертає у точку виклику випадкове число з діапазону від 0 до rmax-1. Створення динамічного масиву з випадкових чисел від 0 до 9, що має розмір num, виконується в такий спосіб:

int *arr=new int[num];

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

*(arr+i)=rand()%10;

7.1.3. Видалення елемента із масиву

Щоб видалити k-й елемент із масиву arr, що має розмір num, необхідно зробити наступне

– залишити без зміни перші (k-1) елементів;

– зсувати всі елементи, починаючи з k-го, на один елемент уліво;

– зменшити кількість елементів масиву num на одиницю.

Ці операції реалізуються за допомогою інструкцій:

for(int i=k; i<num-1; i++)

*(arr+i) = *(arr+i+1);

num--;

7.1.4. Вставка елемента в масив

Нехай є динамічний масив arr розміром num, і нехай k - номер елемента, після якого в масив потрібно вставити елемент хins. Для вставки необхідно виконати наступне:

– створити новий масив arr1 на одиницю більшого розміру, ніж вихідний;

– скопіювати в arr1 без зміни перші k елементів;

– скопіювати в arr1 елементи, починаючи з (k+1)-го (зсув на один елемент),

– на місце (k+1)-го елемента записати значення хins;

– видалити з пам'яті вихідний масив arr.

Відповідний код може мати вигляд:

int *arr1 = new int[++num]; //Створення нового масиву

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

*(arr1+i) = *(arr+i);

*(arr1+k+1) = xins;

for(i=k+1; i<num; i++)

*(arr1+i+1) = *(arr+i);

delete [] arr; //Видалення колишнього масиву

7.1.5. Перестановка двох елементів

Перестановка елементів k і m цілочисельного масиву здійснюється за допомогою робочої змінної int work:

work=arr[k];

arr[k]=arr[m];

arr[m]=work;

7.1.6. Циклічна перестановка елементів

Циклічну перестановку елементів масиву можна відбразити, як одночасне переміщення всіх елементів по масиву, замкнутому у кільце. Циклічну перестановку вліво можна виконати в такий спосіб:

– скопіювати 1-й елемент масиву в робочу змінну;

– зсунути інші елементи з 2-го до N-го на одну позицію вліво;

– скопіювати елемент із робочої змінної в останню звільнену позицію.

Відповідний код буде мати вигляд:

work=*arr;

for(i=0; i<num-1; i++)

*(arr+i) = *(arr+i+1);

*(arr+num-1) = work;

Якщо необхідно виконати циклічну перестановку на k елементів, то організується ще один (зовнішній) цикл:

int k=5, circle=0;

while(circle<k){

work = *arr;

for(i=0; i<num-1; i++)

*(arr+i) = *(arr+i+1);

*(arr+num-1) = work;

circle++;

}