Під час компіляції програмного коду для статично оголошених масивів надається пам’ять. Для ефективного використання пам’яті призначене динамічне оголошення масивів, а саме:
<тип вказівника> *<назва> = new<тип змінної>[<кількість>];
|
Після виконання цієї команди буде виділена неперервана ділянка пам’яті обсягом
sizeof(тип змінної) * <кількість>,
і назва масиву вказуватиме на початок цієї ділянки.
Після опрацювання масиву вивільнити пам’ять можна за допомогою команди
delete[]<назва вказівника на масив даних>;
|
Задача 1 (про створення нового масиву). Утворити масив у, елементи якого обчислюються за формулою
– 2, де k = 1, 2, …, 10. Побудувати масив, який складається з від’ємних елементів масиву y. Вивести результати обчислень. Якщо шуканих величин немає, то вивести про це повідомлення.
У наступній програмі змінна п визначає кількість від’ємних елементів у новому масиві.
#include<iostream.h>
#include<match.h>
#defineN 10
voidmain()
{
float*y = new float[N];
float*g = new float[N];
intk, n;
cout<< “\t Масив Y:\n”;
for(k = 0, n = 0; k < 10; k++)
{
*(y + k) = log(k + 1) – 2;
cout<< k << “\t” << *(y + k) << “\n”;
if(*(y + k) < 0)
{ *(g + n) = *(y + k); n++;}
}
delete[] y;
cout<< “\t Масив G:\n”;
for(k = 0; k < n; k++) cout<< k << “\t” << *(y + k) << “\n”;
delete[] g;
}
|
Задача 2 (про АТС).Нехай
- це число викликів, які надходять на АТС за k-ту секунду. Припустимо, що
- випадкове число зі значенням від 0 до 30. Утворити масив у з десятьма елементами (k = 1, 2, …, 10). Обчислити суму викликів за перші 10 с роботи АТС. Визначити максимальну суму викликів, які надійшли за деяку одну секунду. Вивести результати обчислень.
Зауваження. Для того, щоб отримати ціле випадкове число з діапазону від 0 до п, можна скористатись функцією ___________, яка описана у модулі __________. Щоб під час виконання програми кожен раз отримувати різні значення, перед використанням функції _____________ треба записати функцію randomize().
Розв’яжемо задачу про АТС, використовуючи функції користувача, параметрами яких є масиви.
// Програма АТС 1 з використанням функцій
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
intSuma(int y[10]);
intMax(int y[10]);
voidmain()
{
randomize();
inty[10];
cout << “Секунда \t Кількість викликів \n”;
for(int S = 0, k = 0; k < 10; k ++)
{
y[k] = rundom(30);
cout << (k + 1) << “\t\t” << y[k] << “\n”;
}
S = Suma(y);
cout<< “\n S=” << S;
intmax;
max = Max(y);
cout<< “\n max = “ << max;
getch();
}
//------------------------------------------------------------------------------------------------
intSuma(inty[10])
{
for(intS = 0, k = 0; k < 10; k++)
S += *(y + k);
returnS;
}
//------------------------------------------------------------------------------------------------
intMax(inty[10])
{
intk = 0;
for(intmax = *y; k < 10; k++)
if(*(y + k) > max) max = *(y + k);
returnmax;
}
|
Отже, при оголошенні масиву в якості формального параметра функції не треба вказувати розмірність масиву, а достатньо вказати лише квадратні дужки.