
Комп’ютерний практикум № 1
МАСИВИ
Одновимірні масиви
Мета роботи - ознайомитися з особливостями типу масиву, опанувати технологію використання одновимірних масивів даних, навчитися розробляти алгоритми та програми із застосуванням одновимірних масивів.
Теоретичні відомостi
Масив - це структура даних, що являє собою впорядкований набір фіксованої кількості однотипних компонент довільної структури. Тип компонентів масиву, який ще називають базовим типом, в кінцевому рахунку повинен бути простим.
Масив визначається ім'ям, що є єдиним для всіх його елементів, і розмірністю - кількістю координат (індексів), необхідних для визначення місцезнаходження елемента в масиві.
Тип масиву – це тип даних, множина допустимих значень якого складається з усіх масивів, які мають одну й ту ж розмірність і базовий тип.
Одновимірний масив оголошується в C/C++ наступним чином:
тип_елементів ім’я_масиву[кількість_елементів];
Наприклад,
int a[3];
double b[10].
Масиви, як цілісні структури, можуть виступати як операнди тільки в операціях "дорівнює", "не дорівнює" та в операторі присвоювання. При цьому відповідні масиви повинні бути ідентичними за структурою (мати однакову кількість і типи компонент). Всі інші дії виконуються тільки з елементами масивів відповідно до їх типу.
Доступ до окремого елемента масиву, зазвичай, здійснюється шляхом вказання імені масиву і відповідного індексу:
ім'я_масиву[індекс].
Наприклад,
m[5], k[2003].
При цьому, на відміну від Pascal, де індексація елементів масиву визначається типом індексу, у мові С/С++ вона є стандартною і починається з 0.
У С/С++ доступ до елементів масиву може здійснюватися також за покажчиком, оскільки ім’я масиву – покажчик на його перший елемент. Наприклад,
int m[9];
int *p;
p = &m[0];
p++; //перехід до наступного елемента.
При організації доступу до елементів масиву за покажчиком використовуються наступні операції роботи з покажчиками:
операція інкремента (++) – значення покажчика збільшується на кількість байт, що визначається типом, на який він вказує;
операція декремента (--) – значення покажчика зменшується на кількість байт, що визначається типом, на який він вказує;
додавання цілого числа (+) - задає логічне зміщення на кількість байт, яка необхідна для розміщення заданого числа об’єктів, на які посилається покажчик;
скорочене додавання цілого числа (+=) - задає фізичне зміщення на кількість байт, яка необхідна для розміщення заданого числа об’єктів, на які посилається покажчик;
скорочене віднімання цілого числа (-=) - задає фізичне зміщення на кількість байт, яка необхідна для розміщення заданого числа об’єктів, на які посилається покажчик;
віднімання цілого числа (-) - задає логічне зміщення на кількість байт, яка необхідна для розміщення заданого числа об’єктів, на які посилається покажчик;
віднімання покажчиків - визначення значення різниці номерів елементів масиву, на які вказують покажчики.
Наприклад,
float m[7],n,*mPtr1,*mPtr2;
mPtr1=&m[0];
mPtr2=m;
mPtr1+=5; // зміщення вперед на 4 об’єкта (дійсних числа)
mPtr1 --; // перехід до попереднього елемента масиву
mPtr2 ++; // перехід до наступного елемента масиву
cout<<*(mPtr2+3)<<“\n”; // покажчик-зміщення вперед
cout<<*(mPtr1-2)<<“\n”; // покажчик-зміщення назад
mPtr1 -= 1; // зміщення назад на 1 об’єкт (дійсних число)
n = mPtr1-mPtr2; // відстань між елементами масиву
Обробка елементів одновимірних масивів, зазвичай, виконується в простих циклах for, які забезпечують послідовне звертання до кожного елемента масиву. При цьому, як правило, індекси елементів масиву використовуються як параметри циклу. Наприклад,
for(i=0; i<=9; i++)
scanf(“%d”,&a[i]); // введення елемента масиву a
Для ініціалізації масиву (присвоєння початкових значень) доцільно використовувати стандартні функції для генерації випадкових чисел. У С/С++ для цього, зазвичай, використовуються функції rand і srand, описані у заголовному файлі stdlib.h. Функція rand служить для генерації цілого випадкового числа із діапазону (0 ¸ RAND_MAX). Задання певного діапазону генерації цілих чисел здійснюється за формулою:
rand()%b + a,
де b - коефіцієнт масштабування, a - величина здвигу.
Функція srand служить для ініціалізації генератора випадкових чисел.
Масиви можуть бути параметрами підпрограм. У С/С++ передача масиву у функцію здійснюється тільки за адресою. Можливі формати оголошення одновимірних масивів-параметрів:
тип *ім'я_покажчика;
тип ім'я_масива[кількість_елементів];
тип ім'я_масива[]1.
Особливості передачі параметрів-масивів:
Для параметра-масива, що може мати різну розмірність, треба передавати два параметри - покажчик на масив (ім’я масиву) і кількість його елементів, наприклад,
const int n=9,m=7;
int mas1[n],mas2[m];
float f_3(int arr[],int r)
{ ...
}
int main()
{ cout<<f_3(mas1,n)<<" "<<f_3(mas2,m);
}
Для заборони модифікації значень параметра-масива використо-вується специфікація const, наприклад,
int mas[9];
float f_4(const int arr[])
{ ...
}
int main()
{ cout<<f_4(mas);
}
Окремі елементи масиву передаються у функцію за значенням.
Базовими операціями обробки одновимірних масивів є:
введення масиву, його ініціалізація;
виведення масиву;
пошук максимального або мінімального елемента масиву;
обчислення узагальнювальних характеристик (сум елементів, їх добутків, тощо);
пошук заданого елемента;
перестановка елементів або обмін значеннями між елементами масиву;
вставка та видалення елемента масиву.
Базові операції обробки масивів слід реалізовувати у вигляді функцій, які згодом можуть бути використані як «архітектурні блоки» при розв’язанні більш складних задач.