- •Insert Project Into Workspace..
- •VisualComponentManager
- •Типи майстрів проектів
- •Void cLab_04 1Dlg::OnDel()
- •Void cLab 04 1Dlg::OnOptimum()
- •Int NumCars; //Количество автомобілів
- •Void cLab 04 1Dlg::OnOpen()
- •Void cLab_06Dlg::OnReplace(nmhdr* pNmhdr, lresult* pResult)
- •Робота №1 Програмування лінійних алгоритмів
- •1.2. Функції бібліотеки math.Lib
- •1.4. Індивідуальні завдання
- •Работа №2 Програмування алгоритмів, що розгалужуються
- •2.1. Логічні операції і операції порівняння
- •3.5. Приклад виконання роботи
- •4.3. Індивідуальні завдання
- •5.2. Операції над покажчиками
- •5.5. Індивідуальні завдання
- •Int strlen(st) – повертає довжину рядка st.
- •Int atoi(st) – перетворить рядок st в число цілого типа (int).
- •Return вираження;
- •8.2. Передача параметрів
- •8.3. Перевантаження функцій і покажчик на функцію
- •Hanr(n-1,s1,s3,s2);
- •Hanr(n-1,s3,s2,s1);
- •9.3. Індивідуальні завдання
- •Робота №10 Програмування з використанням файлів
- •10.1. Організація роботи з файлами
- •I або I ( десяткове, вісімкове або шістнадцятиричне ціле;
- •Void s_qs(tStudent st[], int n)
- •11.3. Індивідуальні завдання
- •Робота №15 Програмування з використанням двусвязанных списків
- •15.1. Черги на основі двусвязанных списків
- •Методика оцінювання робіт студентів
- •Литература
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;
}
}
