Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 Курс / Практика / metodichka_u_praktika.doc
Скачиваний:
10
Добавлен:
30.05.2020
Размер:
2.15 Mб
Скачать

4.3. Індивідуальні завдання

Виконати завдання відповідно до виданого варіанту.

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

2. Заданий масив з до символів. Перетворити масив таким чином: розташувати символи в зворотному порядку.

3. Заданий масив з до чисел. Знайти число, що найчастіше зустрічається в цьому масиві.

4. Заданий масив з до чисел. Відсортувати елементи масиву за збільшенням.

5. Заданий масив з до чисел. Знайти числа, що входять в масив лише один раз.

6. Заданий масив з до чисел. Зрушити елементи масиву циклічно на n позицій вліво.

7. Заданий масив з до чисел. Зрушити елементи масиву циклічно на n позицій управо.

8. Заданий масив з до чисел. Перетворити масив таким чином: всі негативні елементи масиву перенести в початок, а всі інші – в кінець, зберігши вихідне взаємне розташування як серед негативних, так і серед позитивних елементів.

9. Заданий масив з до символів. Створити два нові масиви: у перший перенести всі цифри з вихідного масиву, в другій – всі останні символи.

10. Заданий масив з до символів. Визначити, чи симетричний він, тобто чи читається він однаково зліва направо і справа наліво.

11. Задано два масиви. Знайти найменші серед елементів першого масиву, які не входять в другий масив.

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

13. Заданий масив з до символів. Видалити з нього повторні входження каж-дого символу.

14. Заданий масив з до символів. Визначити кількість різних елементів в масиві.

15. Заданий масив з до символів латинського алфавіту. Вивести на екран в алфавітному порядку всі символи, які входять в цей масив по одному разу.

Работа №5

Покажчики. Програмування з використанням динамічних двовимірних масивів

5.1. Оголошення покажчика

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

тип *имя покажчика

Наприклад:

int *a; double *b, *d; char *c;

Знак «зірочка» відноситься до імені покажчика. Значення покажчика відповідає першому байту ділянки пам'яті, на яку він посилається. На одну і ту ж ділянку пам'яті може посилатися будь-яке число покажчиків.

У мові Сі існує три види покажчиків:

1. Покажчик на об'єкт відомого типа. Містить адресу об'єкту певного типа.

2. Покажчик типа void. Застосовується, якщо тип об'єкту заздалегідь не визначений.

3. Покажчик на функцію.

5.2. Операції над покажчиками

Над покажчиками можна провести дві унітарні операції:

1. & (узяти адресу). Покажчик отримує адресу змінної. Дана операція застосовна до змінних, під які виділена відповідна ділянка пам'яті.

2. * (операція разадресации). Призначена для доступу до величини, розташованої за даною адресою.

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

Покажчики, як правило, використовуються при роботі з динамічною пам'яттю (heap, або «купа»). Для роботи з динамічною пам'яттю в мові Сі визначені наступні функції: malloc, сalloc, realloc і free.

У мові C++ для виділення і звільнення пам'яті визначені операції new і delete відповідно. Використовують дві форми операцій:

1. Тип *указатель = new тип (значення) – виділення ділянки пам'яті відповідно до вказаного типа і занесення туди вказаного значення.

delete покажчик – звільнення виділеної пам'яті.

2. Тип *указатель = new тип[n] – виділення ділянки пам'яті розміром n блоків вказаного типа.

delete [ ]покажчик – звільнення виділеної пам'яті.

5.3. Створення двовимірного динамічного масиву

Ім'я будь-якого масиву розглядається компілятором як покажчик на нульовий елемент масиву. Оскільки ім'я двовимірного динамічного масиву є покажчиком на покажчик, то спочатку виділяться пам'ять під покажчики, а потім під відповідних цим покажчикам рядка. Звільнення виділеної пам'яті відбувається в зворотному порядку:

double **umas2;

umas2 = new double*[n];

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

umas2[i]= new double[m];

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

delete [ ]umas2[i];

delete [ ]umas2;

umas2=NULL;

5.4. Приклад виконання роботи

Умова 1. Знайти мінімальний і максимальний елементи матриці і їх координати.

min=max=a[0][0];

imin=jmin=imax=jmax=0;

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

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

{

if (а[i][j]<min) { min=a[i][j]; imin=i; jmin=j; }

else

if (а[i][j]>max) { max=a[i][j]; imax=i; jmax=j; }

}

Умова 2. Упорядкувати рядки матриці по неубуванню їх максимальних елементів.

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

{

b[i]=a[i][0];

for (j=1; j<m; j++)

if (а[i][j]>b[i]) b[i]=a[i][j];

}

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

for (j=i+1; j<n; j++)

if (b[i]>b[j])

{

t=b[i];

b[i]=b[j];

b[j]=t;

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

{

t=a[i][k];

а[i][k]=a[j][k];

а[j][k]=t;

}

}