Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Робочий зошит з праграмув на 1 сем.doc
Скачиваний:
5
Добавлен:
10.11.2019
Размер:
5.14 Mб
Скачать

Розділ іv. Складені типи даних Лекція № 10

Тема. Одновимірні масиви. Динамічне оголошення масивів. Передача масивів у функцію.

Мета. Отримати загальне поняття про одновимірні масиви та основні принципи роботи з ними. З’ясувати як використовувати вказівники при роботі з одновимірними масивами.

Опорний конспект

Масив – послідовна група змінних, що мають одне й теж ім’я та один і той самий тип. Масив називається одновимірним (вектором), якщо він складається з одного рядка та N стовпців.

Масив складається з елементів. Кожен елемент має індекси, за якими його можна знайти у масиві. Кількість індексів визначає розмірність масиву.

Масив оголошується наступним чином:

тип ім’я_масиву [розмір];

Розмір – це кількість елементів масиву. Розмір масиву необхідно знати і задавати заздалегідь, оскільки компілятор має зарезервувати для нього необхідний обсяг пам’яті. Розміром може бути лише стала величина (не змінна).

Проініціалізувати масив (надати значення елементам масиву) можна одним із способів:

  • використовуючи принцип замовчування;

  • безпосередньо під час його оголошення;

  • застосовуючи команду присвоєння;

  • під час введення даних із клавіатури.

За замовчуванням усім елементам масиву надається значення 0. Масив можна ініціалізувати повністю або частково відразу під час його оголошення, записуючи значення змінних через кому у фігурних дужках. Наприклад,

int Stud[] = {2, 10, 5, 7, 3};

float rist[10] = {163.4, 154.6, 170, 172, 8};

char alphavit[6] = “Абетка”

або char alphavit[6] = {‘А’, ‘б’, ‘е’, ‘т’, ‘к’, ‘а’}.

Для опрацювання елементів масиву найчастіше використовують команду циклу for, хоча можна застосувати і while або do-while.

Введення (виведення) елементів одновимірного масиву можна організувати з клавіатури наступним чином:

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

cin>>c[j];

Для того, щоб не вводити при кожному запуску програми всі елементи масиву, масив можна заповнити автоматично. Для цього існує функція random(K) – генератор випадкових чисел.

Наприклад:

#include <iostream>

#include <conio.h>

#include <stdlib.h>

int main()

{

const int n=6;

int k, j;

double c[n];

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

{

c[j]=random(n)-10;

cout<<c[j]<<"\n";

}

cin>>k;

return 0;

}

За допомогою операції sizeof(вираз) можна визначити розмір пам’яті, який відповідає ідентифікатору або типу.

Приклад 1. Створити масив з перших ста цілих чисел і обчислити суму всіх його значень можна одним із способів:

int n[100]; 1-й спосіб

int S = 0;

for (k = 0; k < 100; )

{

*(n + k) = ++k;

S += *(n + k);

}

int n[100]; // 2-й спосіб

int S = 0;

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

{

n[k] = k + 1;

S += n[k];

}

Тренувальні вправи

  1. Написати програму, що знаходить суму додатних елементів масиву:

2. В одновимірному масиві замінити всі від’ємні елементи на середнє арифметичне елементів масиву:

3. В одновимірному масиві замінити кожен третій елемент на суму двох попередніх.

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

Під час компіляції програмного коду для статично оголошених масивів надається пам’ять. Для ефективного використання пам’яті призначене динамічне оголошення масивів, а саме:

<тип вказівника> *<назва> = new <тип змінної>[<кількість>];

Після виконання цієї команди буде виділена неперервана ділянка пам’яті обсягом

sizeof (тип змінної) * <кількість>,

і назва масиву вказуватиме на початок цієї ділянки.

Після опрацювання масиву вивільнити пам’ять можна за допомогою команди

delete[] <назва вказівника на масив даних>;

Задача 1 (про створення нового масиву). Утворити масив у, елементи якого обчислюються за формулою – 2, де k = 1, 2, …, 10. Побудувати масив, який складається з від’ємних елементів масиву y. Вивести результати обчислень. Якщо шуканих величин немає, то вивести про це повідомлення.

У наступній програмі змінна п визначає кількість від’ємних елементів у новому масиві.

#include <iostream.h>

#include <match.h>

#define N 10

void main()

{

float *y = new float[N];

float *g = new float[N];

int k, 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>

int Suma(int y[10]);

int Max(int y[10]);

void main()

{

randomize();

int y[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;

int max;

max = Max(y);

cout << “\n max = “ << max;

getch();

}

//------------------------------------------------------------------------------------------------

int Suma(int y[10])

{

for (int S = 0, k = 0; k < 10; k++)

S += *(y + k);

return S;

}

//------------------------------------------------------------------------------------------------

int Max(int y[10])

{

int k = 0;

for (int max = *y; k < 10; k++)

if (*(y + k) > max) max = *(y + k);

return max;

}

Отже, при оголошенні масиву в якості формального параметра функції не треба вказувати розмірність масиву, а достатньо вказати лише квадратні дужки.