Professional Documents
Culture Documents
Ap PZ 2023 09
Ap PZ 2023 09
Практичне заняття № 9
Тема: Робота з одновимірними динамічними масивами
Форма заняття: Практичне заняття
Мета заняття: Засвоєння матеріалу, пов’язаного з використанням динамічних
об’єктів
Методи навчання: Вивчення матеріалу під керівництвом викладача
Хід заняття:
Теоретичні відомості
Мова програмування С++ дозволяє звертатись до програмних об’єктів через
адреси, які вони займають у пам’яті. Для цього використовують вказівники, у яких
містяться адреси перших байтів фрагменту пам’яті, що займає даний об’єкт. Це
можуть бути змінні, константи, функції або інші вказівники.
У мові C++ динамічне розподілення пам’яті виконується за допомогою
оператора new. У разі успішного виділення пам’яті оператор new повертає адресу
виділеного фрагменту пам’яті (його першої ячейки).
Наступна форма оператора new виділяє пам'ять під масив заданого розміру, що
складається з елементів певного типу:
int *pra = new int[4];
У цьому прикладі пам'ять виділяється під масив із чотирьох елементів типу int.
На жаль, дана форма оператора new не дозволяє ініціалізувати елементи масиву.
Кожному оператору new має відповідати власний оператор delete. Тобто, після
закінчення роботи з динамічним об’єктом, пам’ять, яку він займає має бути
звільненою.
Приклад 1. Ввести деяку послідовність цілих чисел і створити динамічний
масив з чисел, розміщених після першого двозначного числа (якщо двозначних чисел
немає, вибрати всі). За допомогою функції поміняти місцями елементи, які стоять
поряд: 1 і 2, 3 і 4 тощо.
#include <iostream> // https://replit.com/@hodasevich/AandPPZ01301#main.cpp
using namespace std;
void fun(int a[], int n)
{
int tmp;
if(n % 2)
{
n--; // Якщо кількість елементів непарна, не розглядати останній з них
}
for(int i = 0; i < n; i += 2)
{
tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
}
}
int main()
{
int n, j = 0, kol, k;
cout << "\n Input n = ";
cin >> n;
int *a = new int[n];
cout << \n Input " << n << " integers\n;
for(int i = 0; i < n; i++)
cin >> a[i];
for(int i = 0; i < n; i++)
if(abs(a[i]) > 9 && abs(a[i]) < 100)
{
k = i; break;
}
kol = n - k - 1;
int *b = new int[kol];
for(int i = k + 1; i < n; i++)
{
b[j] = a[i]; j++;
}
cout << "\n Dynamic array: \n\n";
for(int i = 0; i < kol; i++)
cout << b[i] << "\t";
fun(b, kol);
cout << "\n\n Dynamic array with swapped elements :\n\n";
for(int i = 0; i < kol; i++)
cout << b[i] << "\t";
delete[]a; delete[]b;
return 0;
}
Приклад 2. Ввести деяку послідовність дійсних чисел і створити динамічний
масив лише з чисел, значення яких попадає в інтервал [60, 100]. За допомогою
функції визначити мінімальний і максимальний елементи та обчислити середнє
арифметичне всіх елементів.
#include <iostream> // https://replit.com/@hodasevich/APPZ01302#main.cpp
using namespace std;
Математичні функції
Запис
Функція
Математика Мова С++
натуральний логарифм ln x log(x)
ступень xy pow(x, y)
квадратний корінь √x sqrt(x)
корінь y pow(x, 1.0/y)
√x
абсолютне значення (int) |x| abs(x)
абсолютне значення (double) |x| fabs(x)
синус sin x sin(x)
косинус cos x cos(x)
тангенс tg x tan(x)
арксинус arcsin x asin(x)
арккосинус arccos x acos(x)
арктангенс arctg x atan(x)
гіперболічний синус sh x sinh(x)
гіперболічний косинус ch x cosh(x)
гіперболічний тангенс th x tanh(x)
гіперболічний арксинус arcsh x asinh(x)
гіперболічний арккосинус arcch x acosh(x)
гіперболічний арктангенс arcth x atanh(x)
експонента ex exp(x)
Для використання таких функцій слід приєднати до програми файл cmath за
допомогою директиви #include <cmath>.
Скриті символи
Послідовність Числове значення Результат
\a 0x07 Звуковий сигнал
\b 0x08 Переведення каретки назад
\f 0x0c Нова сторінка
\n 0x0a Переведення строки
\r 0x0d Повернення каретки
\t 0x09 Табуляція
\v 0x0b Вертикальна табуляція
\" 0x22 Подвійні лапки
\\ 0x5с Зворотний слеш
Контрольні питання
– За яким принципом обчислювальна система звертається до пам’яті?
– Чим відрізняється статичне виділення пам’яті від динамічного?
– Що таке стек і за яким принципом відбувається управління стеком?
– Як утворений адресний простір обчислювальної системи?
– Що таке посилання на програмний об’єкт?
– Що таке вказівник на програмний об’єкт?
– Яким чином утворюються динамічні об’єкти?
Література та посібники:
1. Lafore Robert. Object-Oriented Programming in C++ Fourth Edition URL :
https://fac.ksu.edu.sa/sites/default/files/ObjectOrientedProgramminginC4thEdition.pdf
2. Азарян А.А., Карабут Н.О., Козикова Т.П., Рибальченко О.Г., Трачук А.А.,
Шаповалова Н.Н. Основи алгоритмізації та програмування: Навчальний посібник.
– Кривий Ріг: Вид-во ОктанПринт, 2014. – 308 с.
3. Булгакова О. С. Алгоритмізація і програмування: теорія та практика : навчальний
посібник для дистанційного навчання / О. С. Булгакова, В. В. Зосімов, Г. В.
Ходякова. – Миколаїв: СПД Румянцева, 2021. – 138 с.
4. Мельник А. Архітектура комп’ютерів : підручник / А. Мельник. – Луцьк :
Волинська обласна друкарня, 2008. – 470 с.
5. Кравець П.О. Об'єктно-орієнтоване програмування / Навчальний посібник. –
Львів: Видавництво Львівської політехніки, 2012. – 624 с.