You are on page 1of 7

Алгоритмізація та програмування

Практичне заняття № 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;

double fun(double a[], int n, double &min, double &max)


{
double s = 0;
min = a[0]; max = a[0];
for(int i = 0; i < n; i++)
{
s += a[i] / n;
if(min > a[i]) { min = a[i]; }
if(max < a[i]) { max = a[i]; }
}
return s;
}
int main()
{
int n, j = 0, kol = 0;
double min, max, avg;
cout << "\n Введіть кількість елементів n = ";
cin >> n;
double *a = new double[n];
cout << "\n Введіть " << n << " чисел\n";
for(int i = 0; i < n; i++)
{
cin >> a[i];
}
for(int i = 0; i < n; i++)
{
if(a[i] >= 60 && a[i] <= 100) { kol++; }
}
double *b = new double[kol];
for(int i = 0; i < n; i++)
if(a[i] >= 60 && a[i] <= 100)
{
b[j] = a[i];
j++;
}
cout << "\n Dynamic array: \n";
for(int i = 0; i < kol; i++)
{
cout << b[i] << " ";
}
cout << endl;
avg = fun(b, kol, min, max);
cout << "\n Average = " << avg << ", min = "
<< min << ", max = " << max << endl;
delete[]a; delete[]b;
return 0;
}
Приклад виконання практичної роботи
1. Повторити матеріал з теми “Посилання, вказівники та динамічні об’єкти” та
терміни і методи, які використовуються під час роботи з масивами.
2. Опанувати теоретичний матеріал.
3. Ввести деяку послідовність цілих чисел і створити динамічний масив лише з чисел,
значення яких не перевищують 50. За допомогою функції обчислити суму тільки
двоцифрових елементів.
#include <iostream> // https://replit.com/@hodasevich/AandPPZ01303#main.cpp
using namespace std;

double fun(double a[], int n)


{
double s = 0;
for(int i = 0; i < n; i++)
{
if(a[i] > 9)
{
s += a[i];
}
return s;
}
}
int main()
{
int n = 0, j = 0, kol = 0, k = 0;
double min, max, avg;
cout << "\n Введіть кількість елементів n = ";
cin >> n;
double *a = new double[n];
cout << "\n Введіть " << n << " чисел\n";
for(int i = 0; i < n; i++)
{
cin >> a[i];
}
for(int i = 0; i < n; i++)
{
if(a[i] <= 50) { kol++; }
}
double *b = new double[kol];
for(int i = 0; i < n; i++)
if(a[i] <= 50)
{
b[j] = a[i];
j++;
}
cout << "\n Dynamic array: \n";
for(int i = 0; i < kol; i++)
{
cout << b[i] << " ";
}
cout << endl;
avg = fun(b, kol);
cout << "\n << "\n Summ = " << sum << endl;
delete[]a; delete[]b;
return 0;
}

Варіанти завдань до практичної роботи № 9


№ Індивідуальне завдання
1. Ввести деяку послідовність цілих чисел і створити динамічний масив лише з тих чисел,
значення яких менше 6-ти. За допомогою функції обчислити середнє арифметичне
елементів масиву
2. Ввести деяку послідовність дійсних чисел і створити динамічний масив лише з додатних
чисел. За допомогою функції визначити мінімальний елемент масиву та його індекс
3. Ввести деяку послідовність дійсних чисел і створити динамічний масив з чисел,
розміщених до першого від’ємного числа (якщо від’ємних чисел немає, вибрати всі). За
допомогою функції розмістити елементи масиву у порядку зростання значень
4. Ввести деяку послідовність цілих чисел і створити динамічний масив лише з парних
ненульових чисел. За допомогою функції визначити мінімальний та максимальний
елементи масиву
5. Ввести деяку послідовність чисел і створити динамічний масив з чисел, розміщених до
першого числа зі значенням нуль (якщо нулів немає, вибрати всі числа). За допомогою
функції обчислити добуток елементів, значення яких за модулем менше 10-ти
6. Ввести деяку послідовність дійсних чисел і створити динамічний масив лише з чисел,
модуль яких не перевищує 8. За допомогою функції обчислити середнє арифметичне
мінімального і максимального елементів масиву
7. Ввести деяку послідовність цілих чисел і створити динамічний масив з чисел,
розміщених до першого тризнакового числа (якщо тризнакових чисел немає, вибрати
всі). За допомогою функції обчислити середнє арифметичне непарних елементів
8. Ввести деяку послідовність цілих чисел і створити динамічний масив лише з
№ Індивідуальне завдання
двознакових чисел. За допомогою функції обчислити кількість та суму парних елементів
масиву
9. Ввести деяку послідовність цілих чисел і створити динамічний масив з чисел,
розміщених до першого двознакового числа. За допомогою функції обчислити добуток
непарних елементів масиву
10. Ввести деяку послідовність цілих чисел і створити динамічний масив з чисел,
розміщених після першого тризнакового числа (якщо тризнакових чисел немає, видати
про це повідомлення). За допомогою функції обчислити середнє арифметичне елементів
масиву, кратних 3
11. Ввести деяку послідовність дійсних чисел і створити динамічний масив з чисел,
розміщених після першого числа зі значенням 0 (якщо нулів немає, видати про це
повідомлення). За допомогою функції обчислити суму елементів, абсолютне значення
яких не перевищує 10
12. Ввести деяку послідовність дійсних чисел і створити динамічний масив з чисел,
розміщених після першого від’ємного числа (якщо від’ємних чисел немає, видати про це
повідомлення). За допомогою функції поміняти місцями мінімальний і максимальний
елементи масиву
13. Ввести деяку послідовність дійсних чисел і створити динамічний масив лише з чисел,
значення яких належить проміжку [10, 25]. За допомогою функції визначити кількість
елементів, значення яких більше за значення першого елемента масиву
14. Ввести деяку послідовність цілих чисел і створити динамічний масив лише з непарних
чисел. За допомогою функції замінити всі від’ємні елементи нулями
15. Ввести деяку послідовність дійсних чисел і створити динамічний масив лише з чисел,
які перевищують свій порядковий номер. За допомогою функції розмістити елементи
масиву у зворотному порядку
16. Ввести деяку послідовність дійсних чисел і створити динамічний масив лише з чисел,
модуль яких не попадає в проміжок (20, 40]. За допомогою функції обчислити кількість
елементів, що перевищують середнє арифметичне всіх елементів
17. Ввести деяку послідовність цілих чисел і створити динамічний масив лише з ненульових
чисел. За допомогою функції визначити найбільший з парних елементів
18. Ввести деяку послідовність дійсних чисел і створити динамічний масив лише з чисел,
модуль яких попадає в проміжок [5, 50). За допомогою функції визначити мінімальний із
додатних елементів
19. Ввести деяку послідовність цілих чисел і створити динамічний масив з чисел,
розміщених до першого від’ємного двознакового числа (якщо від’ємних двознакових
чисел немає вибрати всі). За допомогою функції замінити мінімальний і максимальний
елементи значенням середнього арифметичного всіх елементів
20. Ввести деяку послідовність цілих чисел і створити динамічний масив лише з чисел,
кратних 3. За допомогою функції обчислити середнє арифметичне елементів, значення
яких більше значення останнього елемента масиву
Довідки
Типи даних
Тип Розмір Min Max
float 6-7 1.175494351 E – 38 3.402823466 E + 38
double 15-16 2.2250738585072014 e – 308 1.7976931348623158 e + 308
unsigned char 1 0 255
signed char (char) 1 -128 127
unsigned short 2 0 65535
signed short (short) 2 -32768 32767
unsigned int 4 0 4294967296
signed int (int) 4 -2147483648 2147483647
unsigned long 4 0 4294967296
signed long (long) 4 -2147483648 2147483647
unsigned long long 8 0 18446744073709551615
signed long long (long long) 8 -9223372036854775808 9223372036854775807

Математичні функції
Запис
Функція
Математика Мова С++
натуральний логарифм 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 с.

You might also like