Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



Нехай є динамічний масив 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++;

}

7.2. Постановка задачі

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

7.3. Варіанти

1. Сформувати одновимірний масив цілих чисел, використовуючи датчик випадкових чисел. Роздрукувати отриманий масив. Видалити елемент із номером К. Додати після кожного парного елемента масиву елемент із значенням 0. Роздрукувати отриманий масив.

2. Сформувати одновимірний масив цілих чисел a[], використовуючи датчик випадкових чисел. Роздрукувати отриманий масив. Видалити перший елемент рівний 0. Додати після кожного парного елемента масиву елемент із значенням a[i-1]+2. Роздрукувати отриманий масив.

3. Сформувати одновимірний масив цілих чисел a[], використовуючи датчик випадкових чисел. Роздрукувати отриманий масив. Видалити всі елементи рівні 0. Додати після першого парного елемента масиву елемент із значенням a[i-1]+2. Роздрукувати отриманий масив.

4. Сформувати одновимірний масив цілих чисел a[], використовуючи датчик випадкових чисел. Роздрукувати отриманий масив. Видалити елементи, індекси яких кратні 3. Додати після кожного від’ємного елемента масиву елемент із значенням |a[i-1]+1|. Роздрукувати отриманий масив.

5. Сформувати одновимірний масив цілих чисел, використовуючи датчик випадкових чисел. Роздрукувати отриманий масив. Видалити елементи кратні 7. Додати після кожного непарного елемента масиву елемент із значенням 0. Роздрукувати отриманий масив.

6. Сформувати одновимірний масив цілих чисел a[], використовуючи датчик випадкових чисел. Роздрукувати отриманий масив. Видалити елемент із заданим номером. Додати після другого парного елемента масиву елемент із значенням a[i-1]+2. Роздрукувати отриманий масив.

7. Сформувати одновимірний масив цілих чисел, використовуючи датчик випадкових чисел. Роздрукувати отриманий масив. Видалити останній елемент рівний 0. Додати після елемента масиву із заданим індексом елемент із значенням 100. Роздрукувати отриманий масив.

8. Сформувати одновимірний масив цілих чисел, використовуючи датчик випадкових чисел. Роздрукувати отриманий масив. Видалити всі елементи із заданим значенням. Додати перед кожним парним елементом масиву елемент із значенням 0. Роздрукувати отриманий масив.

9. Сформувати одновимірний масив цілих чисел, використовуючи датчик випадкових чисел. Роздрукувати отриманий масив. Видалити перший елемент із значенням, яке відповідає заданій умові. Зсунути масив циклічно на k елементів вправо. Роздрукувати отриманий масив.

10. Сформувати одновимірний масив цілих чисел, використовуючи датчик випадкових чисел. Роздрукувати отриманий масив. Видалити 5 перших елементів масиву. Додати до кінця масиву 3 нових випадкових елементи. Роздрукувати отриманий масив.

11. Сформувати одновимірний масив цілих чисел a[], використовуючи датчик випадкових чисел. Роздрукувати отриманий масив. Видалити 5 останніх елементів масиву. Додати в початок масиву 3 елементи із значенням 33. Роздрукувати отриманий масив.

12. Сформувати одновимірний масив цілих чисел, використовуючи датчик випадкових чисел, і роздрукувати масив. Поміняти місцями мінімальний і максимальний елементи масиву. Видалити з масиву всі елементи, які перевищують його середнє значення більш, ніж на 10%. Роздрукувати отриманий масив.

13. Сформувати одновимірний масив цілих чисел, використовуючи датчик випадкових чисел, і роздрукувати масив. Видалити з масиву всі елементи, що збігаються з його мінімальним значенням. Додати в початок масиву 3 елементи, які рівні середньому арифметичному масиву. Роздрукувати отриманий масив.

14. Сформувати одновимірний масив цілих чисел a[], використовуючи датчик випадкових чисел. Роздрукувати отриманий масив. Перевернути масив і, якщо число елементів масиву непарне, видалити його середній елемент. Додати в початок масиву 3 елементи із значенням 99. Роздрукувати отриманий масив.

15. Сформувати одновимірний масив цілих чисел, використовуючи датчик випадкових чисел. За запитом виконати циклічну перестановку елементів масиву вліво або вправо. Роздрукувати отриманий масив зліва направо, починаючи з k-ого елемента, і до k-1-го. Видалити з масиву перший і останній елементи. Роздрукувати отриманий масив справа наліво від k-го до k+1-го елемента.

16. Сформувати одновимірний масив цілих випадкових чисел. Видалити всі елементи, більші даного числа x (x увести з клавіатури).Роздрукувати отриманий масив. Циклічно переставити елементи на 3 позиції вправо. Вставити число y (увести з клавіатури) після всіх елементів, менших його.

17. Сформувати одновимірний масив цілих чисел, використовуючи датчик випадкових чисел. Виконати циклічну перестановку елементів масиву вліво на 5 позицій. Роздрукувати отриманий масив зліва направо, починаючи з k-ого елемента й до k-1. Додати в масив два елементи – у першу й останню позицію. Роздрукувати отриманий масив справа наліво, починаючи з k-ого елемента й до k+1.

18. Сформувати одновимірний масив цілих чисел, використовуючи датчик випадкових чисел. Виконати циклічну перестановку елементів масиву на k позицій вправо. Роздрукувати отриманий масив зліва направо, починаючи з k-ого елемента й до k-1.Додати в масив два елементи – у першу й останню позицію. Видалити з масиву парні елементи. Роздрукувати отриманий масив справа наліво, починаючи з k-ого елемента й до k+1.

19. Сформувати одновимірний масив цілих чисел, використовуючи датчик випадкових чисел. Виконати циклічну перестановку елементів масиву на k позицій уліво або вправо (із запитом). Роздрукувати отриманий масив. Додати в масив два елементи – у першу й останню позицію. Видалити з масиву непарні елементи. Роздрукувати отриманий масив справа наліво, починаючи з k-ого елемента й до k+1.

20. Сформувати одновимірний масив цілих чисел, користуючись датчиком випадкових чисел. За запитом виконати циклічну перестановку елементів масиву вліво або вправо. Роздрукувати отриманий масив зліва направо, починаючи з k-ого елемента й до k-1. Додати в масив після елементів з індексами кратними 5 елементи рівні 0. Роздрукувати отриманий масив справа наліво, починаючи з k-ого елемента й до k+1.

21. Сформувати одновимірний масив цілих чисел, використовуючи датчик випадкових чисел. За запитом виконати циклічну перестановку вліво або вправо на k елементів.. Додати в масив 4 нових елементи: один - перед першим і три – після останнього. Роздрукувати отриманий масив справа наліво, починаючи з k -ого елемента й до k+1.

22. Сформувати одновимірний масив цілих чисел, використовуючи датчик випадкових чисел. Видалити всі елементи, кратні 3 або 5. Роздрукувати отриманий масив. Вставити два елементи: перший - після максимального елемента, другий - перед максимальним елементом. Роздрукувати отриманий масив.

23. Сформувати одновимірний масив цілих чисел, використовуючи датчик випадкових чисел. За запитом виконати серію циклічних перестановок уліво або вправо з виведенням масиву на екран після кожної перестановки. Серія перестановок припиняється за запитом. Видалити з масиву всі елементи, що збігаються з його максимальним значенням. Роздрукувати отриманий масив справа наліво, починаючи з k-ого елемента й до k+1.

24. Сформувати одновимірний масив цілих чисел, використовуючи датчик випадкових чисел. Виконати циклічну перестановку елементів масиву на k позицій уліво. Роздрукувати отриманий масив зліва направо, починаючи з k-ого елемента й до k-1.Видалити з масиву парні елементи. Роздрукувати отриманий масив справа наліво, починаючи з k-ого елемента й до k+1.

25. Сформувати одновимірний масив цілих чисел, використовуючи датчик випадкових чисел. За запитом виконати серію циклічних перестановок вправо з виведенням масиву на екран після кожної перестановки. Серія перестановок припиняється за запитом. Роздрукувати отриманий масив справа наліво, починаючи з k-ого елемента й до k+1. Видалити з масиву непарні елементи. Роздрукувати отриманий масив справа наліво, починаючи з k-ого елемента й до k+1.

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

1. При складанні програми використовуються динамічні масиви.

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

3. Після виконання кожного пункту завдання організувати виведення масиву.

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

1. Постановка задачі.

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

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

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


8. Лабораторна робота 7.
«Двовимірні масиви й функції» (4 год.)

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

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

8.1.1. Обробка багатовимірних масивів

При оголошенні багатовимірного масиву необхідно вказати, що масив має більш ніж один вимір, наприклад,.

int t[2][3];

– оголошення двовимірного масиву з 2 рядків і 3 стовпців. Елементи цього масиву: розташовуються в пам'яті одне за одним.

t[0][0] t[0][1] t[0][2]

t[1][0] t[1][1] t[1][2]

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

8.1.2. Передача масиву у функцію

Масив у функцію передається через адресу першого елемента масиву. Для цього використовується операція непрямої адресації (*), тобто покажчик на масив. У списку аргументів прототипу й визначення функції ставиться покажчик, а у виклику функції – ім'я масиву. Наведемо приклад визначення й виклику функції enter, яка призначена для введення елементів одновимірного масиву:

#include <stdio.h>

void enter(int []); //Прототип функції

void main(){

int v[5];

enter(v); //Виклик функції

}

void enter(int a[]) { //Визначення функції

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

scanf("%d", &a[i]);

}

Замість enter(int a[]) в оголошенні функції можна використовувати запис: enter(int *a). При передачі у функцію багатовимірного масиву повинні бути зазначені границі всіх вимірів, крім першого. Наприклад, для двовимірного масиву:

int arr[2][3]={{1,2,3},{4,5,6}}; //Визначення масиву

void display (int a[][3], int n1) { //Визначення функції

for (int i=0; i<n1; i++){

for (int j=0; j<3; j++) cout << a[i][j] << " ";

cout<<endl;

}

}

...

display (arr); //Виклик функції

8.1.3. Приклад. Функції введення й виведення елементів матриці

Нехай значення елементів квадратної матриці вводяться за допомогою окремої функції enter. Необхідно замінити всі від’ємні значення елементів їхніми модулями й вивести отриманий масив за допомогою функції display..

#include <stdio.h>

#define num 3

void enter(int [][num], int);

void display(int [][num], int);

void main() {

int arr[num][num];

enter(arr, num);

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

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

if (arr[i][j]<0) arr[i][j]= - arr[i][j];

display(arr, num);

}

void enter(int u[][num], int n){

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

printf("\nEnter %d string of matrics", i+1);

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

scanf("%d", &u[i][j]);}

}

void display(int u[][num], int n){

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

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

printf("%d\t", u[i][j]);

printf("\n");}

}

Зверніть увагу на виклик функції: enter(arr, num). Приймаюча функція одержує не весь масив, а тільки адресу першого елемента масиву.

8.2. Постановка задачі

Скласти програму, використовуючи окремі функції для розв'язку кожної задачі свого варіанта. Масив повинен передаватися у функції як параметр.

8.3. Варіанти

1. Ввести двовимірний масив, у якому числа 0 і 1 розміщені випадковим чином, а число стовпців не збігається із числом рядків. Визначити функцію ініціалізації масиву й функцію виведення на екран. Порахувати скільки сусідніх елементів, рівних 1, є у елемента (2;2).

2. Заповнити квадратну матрицю таким чином, щоб на головній діагоналі були розташовані числа від N до 1, під головною діагоналлю нулі, а над головною діагоналлю по рядках числа в порядку зростання від заданого. Оформити заповнення масиву у вигляді окремої функції ініціалізації. Вивести отриману матрицю на екран за допомогою функції.

3. Заповнити квадратну матрицю за наступним правилом: елементи головної діагоналі рівні 1, нижче головної діагоналі - 0, а вище - сумі індексів. Оформити заповнення масиву у вигляді окремої функції ініціалізації. Виведіть матрицю на екран (функція).

4. Написати функцію транспонування квадратної матриці (тобто повороту вихідної матриці на 90°). З її допомогою визначити чи є задана матриця симетричної (транспонована матриця дорівнює вихідній).

5. Заповнити квадратну матрицю випадковими числами (функція). Написати функцію транспонування матриці (повороту на 90°). Написати функцію додавання матриць. Скласти вихідну матрицю й транспоновану. Вивести матриці на екран (функція).

6. Заповнити квадратну матрицю випадковими числами (функція). Написати функцію для видалення одного рядка. Після видалення рядка останній рядок матриці повинен бути заповнено нулями. Вивести вихідну й отриману матриці на екран (функція).

7. Написати функцію для обчислення суми елементів квадратної матриці, які розташовані нижче головної діагоналі. З її допомогою знайти максимальне значення такої суми (функція) в N матрицях випадкових чисел (функція).

8. Заповнити квадратну матрицю випадковими числами (функція). Написати функцію для пошуку мінімального елемента в зазначеному рядку. Зрушити елементи цього рядка циклічно вліво на кількість елементів, рівну мінімальному елементу рядка. Вивести вихідну й отриману матриці на екран (функція).

9. Заповнити квадратну матрицю випадковими числами (функція). Знайти суму елементів першого стовпця без одного останнього елемента, суму елементів другого стовпця без двох останніх, суму елементів третього стовпця без трьох останніх і т.д. Останній стовпець не обробляється. Серед знайдених сум знайти максимальну (функція).

10. Заповнити квадратну матрицю випадковими числами (функція). Знайти мінімальний з неповторюваних елементів матриці. Вивести матрицю (функція) і мінімальний елемент на екран.

11. Заповнити квадратну матрицю випадковими числами (функція). Знайти середнє арифметичне першого стовпця (функція) і кількість елементів матриці, що перевищують середнє арифметичне першого стовпця.

12. Заповнити квадратну матрицю випадковими числами (функція). Знайти середнє арифметичне головної діагоналі (функція) і кількість елементів у першому рядку, менших цього середнього арифметичного.

13. Заповнити квадратну матрицю випадковими числами (функція). Визначити скільки елементів матриці більше будь-якого елемента на головній діагоналі. Вивести на екран масив (функція). і елементи, що задовольняють заданій умові.

14. Заповнити квадратну матрицю випадковими числами (функція). Знайти середнє арифметичне найбільшого (функція) і найменшого (функція) її елементів. Замінити отриманим середнім арифметичним всі елементи заданого рядка. Вивести на екран вихідний і отриманий масиви (функція).

15. Заповнити квадратну матрицю випадковими числами з діапазону від -10 до 10 (функція). Записати всі додатні елементи двовимірного масиву в одновимірний масив arrP, а від’ємні - в одновимірний масив arrN. Вивести вихідний (функція) і отриманий (функція) масиви на екран.

16. Заповнити квадратну матрицю випадковими числами з діапазону від -10 до 10 (функція). Обчислити суму елементів, що перебувають нижче поточного рядка, але вище головної діагоналі (функція). Записати подібні суми в одновимірний масив s[k] (k - номер поточного рядка). Знайти найбільшу із цих сум (функція). Вивести вихідний (функція) і одновимірний (функція) масиви на екран.

17. Заповнити квадратну матрицю випадковими числами від -20 до 20 (функція). Обчислити суму елементів, що перебувають вище поточного рядка, але нижче головної діагоналі (функція). Записати подібні суми в одновимірний масив s[k] (k - номер поточного рядка). Знайти найменшу із цих сум (функція). Вивести вихідний (функція) і одновимірний (функція) масиви на екран.

18. Заповнити квадратну матрицю випадковими числами від -10 до 10 (функція). Обчислити суми елементів рядків (функція) і записати їх в одновимірний масив. Знайти найменшу (функція) і найбільшу (функція) із цих сум. Вивести вихідний (функція) і одновимірний (функція) масиви на екран.

19. Заповнити квадратну матрицю випадковими числами від -20 до 20 (функція). Обчислити суми елементів на всіх діагоналях (функція) і записати їх в одновимірний масив. Знайти найменшу (функція) і найбільшу (функція) із цих сум. Вивести вихідний (функція) і одновимірний (функція) масиви на екран.

20. Заповнити квадратну матрицю випадковими числами (функція). Написати програму побудови одновимірних масивів, елементи яких рівні а) сумам елементів рядків (функція); б) добуткам елементів рядків (функція). Вивести вихідний (функція) і одновимірні (функція) масиви на екран.

21. Заповнити квадратну матрицю випадковими числами (функція). Написати програму побудови одновимірного масиву, елементи якого рівні різниці найбільшого (функція) і найменшого (функція) елементів рядків. Вивести вихідний (функція) і одновимірні (функція) масиви на екран.

22. Заповнити квадратну матрицю випадковими числами від -10 до 10 (функція). Для даного двовимірного масиву обчислити й запам'ятати в іншому двовимірному масиві суму (функція) і число додатних елементів (функція) кожного стовпця вихідного двовимірного масиву. Вивести вихідний і отриманий масиви на екран (функція).

23. Заповнити квадратну матрицю випадковими цілими числами (функція). Знайти для кожного рядка число елементів, кратних 5 (функція), записати інформацію в одновимірний масив і знайти найбільший з отриманих результатів. Вивести вихідний (функція) і одновимірний (функція) масиви на екран.

24. Заповнити двовимірний масив випадковими цілими числами (функція). Знайти найбільший (функція) і найменший (функція) елементи масиву й, чергуючи, заповнити ними одновимірний масив заданої розмірності. Вивести вихідний (функція) і одновимірний (функція) масиви на екран.

25. Заповнити квадратну матрицю випадковими числами з діапазону від -50 до 50 (функція). Сформувати одновимірний масив шляхом ділення додатних елементів матриці на число k. Вивести вихідний (функція) і отриманий (функція) масиви на екран.

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

Всі основні операції над масивом, які виконуються відповідно варіанту завдання, реалізуються за допомогою функцій У більшості варіантів при ініціалізації масиву використовується генератор випадкових цілих чисел (див. лабораторну роботу №5).

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

1. Постановка задачі.

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

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

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


9. Лабораторна робота 8.
«Сортування масивів» (4 год.)

Ціль роботи: Одержання навичок сортування даних різними методами. Порівняння ефективності різних методів сортування.

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

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

У даній лабораторній роботі розв'язується задача впорядкування масиву випадкових чисел за допомогою різних методів сортування. Як вихідний масив розглядається одновимірний масив а[i], що складається з N цілочисельних елементів, згенерованих датчиком випадкових чисел. Необхідно розташувати елементи по зростанню (організувати послідовність із неспадних елементів)..

9.1.1. Метод обміну (бульбашковий)

Цей алгоритм залежно від напрямку сортування нагадує «спливання» у процесі обчислень більш «легких» елементів або «занурення» більш «важких» елементів. Розглянемо сортування масиву розміром N, результатом якого повинна бути неспадна послідовність. Процес сортування реалізуємо шляхом «занурення» більш «важких» елементів. При проході масиву від початку до кінця (зліва направо) порівнюються пари сусідніх елементів. Якщо елемент праворуч виявляється менше елемента ліворуч, то вони переставляються. Звичайно кількість проходів не перевищує числа елементів N. Умовою закінчення проходів є відсутність перестановок при черговому проході. Наявність або відсутність перестановки при проході відзначається прапорцем, що приймає відповідно значення 1 або 0.

Запишемо функцію сортування, у списку аргументів якої: *a - покажчик на масив; num - розмір масиву; &mov - посилання на змінну, що враховує число пересилань.

void bubleSort(int *a, int num, int &mov){

int flag = 1; //Встановити прапорець перед початком проходів

for(int i = 1; i <=num; i++){ //Почати прохід масиву

flag = 0; //Черговий прохід

for (int j=0; j < num-1; j++){

if (a[j+1] < a[j]){ //Розміщення ел-тів по зростанню

swap(a[j+1], a[j]);

mov+=3;

flag = 1; //Встановити прапорець при перестановці

display(a, num); //Вивести результат перестановки }

}

if (flag == 0)break; //Якщо не було перестановок

}

}

Приклад сортування масиву методом обміну (білим кольором показані елементи, які не змінюються при ітерації, сірим кольором – елементи, що міняються місцями):





Дата публикования: 2015-04-07; Прочитано: 4496 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.02 с)...