Операції над масивами
Операції над масивами – це операції над їх окремими елементами: ініціалізація, введення і вивід значень, перестановка значень, копіювання. Для роботи з масивами, як правило, використовуються цикли.
Найбільш часто при роботі з масивами розв'язуються наступні типи задач:
-
аналіз масиву (всього або частини) для знаходження деякої його характеристики;
-
пошук в масиві, тобто визначення елемента (першого, останнього, всіх) з деякою умовою і знаходження його індексу;
-
побудова масиву за деяким правилом, використовуючи індекси, числа або масиви;
-
перетворення масиву (зміна значення, перестановка елементів, додавання або видалення елементів і т.п.);
-
сортування масиву по деякому критерію;
-
виведення масиву в спеціальному вигляді.
Розглянемо більш детально роботу з масивами.
Ініціалізація масиву – привласнення кожному елемента масиву значення, відповідного базовому типу. Можлива явна ініціалізація масиву тільки при його визначенні:
int intarray[5]= { 31, 54, 77, 52, 93 };
або:
int ar [5] = {0, 0, 0, 0, 0};
Розмір масиву указувати необов'язково (компілятор обчислить його по кількості значень, що ініціалізуються):
int V[ ]= {12, 1 -5, 22 -4};
Розмір масиву визначається з аналізу умови задачі. Розмірність і розмір масиву разом з типом його елементів визначають загальний об'єм пам'яті, необхідний для розміщення масиву, яке виконується на етапі компіляції.
За допомогою операції sizeof (ім’я_масиву) можна визначити розмір масиву в байтах (тобто розмір ділянки пам'яті, виділеної для масиву).
Оскільки всі елементи масиву мають однаковий розмір, то кількість елементів в масиві дозволяє визначити вираз:
Sizeof (ім’я_масиву) / sizeof (ім’я_масиву [0]).
Введення масиву реалізується введенням в циклі що значиться його елементів. При цьому розмір масиву задається константою, наприклад:
const int n=5;
int А[n];
for (int i=0; і <n; i++)
{
printf ("input А[%d]\n", і); //в стилі С
scanf ("%d",&A[i])
}
або
int age[4];
for(int j=0; j<4; j++)
{
cout << "Enter an age: ";
cin >> age[j]; //в стилі С++
}
Якщо точна кількість елементів в масиві невідома, то пам'ять можна виділити по максимуму (наприклад, const int n = 100;), а потім заповнювати тільки частину її. Не дивлячись на те, що значення константи n визначається із запасом, надійна програма повинна обов'язково містити перевірку на кількість елементів, що вводяться.
#include "iomanip"
void Vvod (int mas[], int kol_a); //прототипи функцій введення-виведення
void Vyvod (int mas[], int kol_a);
const int n = 1000;
int main ()
{
int а[n];
int kol_а;
cout << "kol_a=??? ";
cin >> kol_а;
if (kol_а > n) { //перевірка
cout << "size > n " << endl;
_getch();
return 1;
}
Vvod (а,kol_а);
Vyvod (а,kol_а);
_getch();
return 0;
}
void Vvod (int mas[], int kol_а) //функція введення елементів
{for(int j=0; j<kol_а; j++)
{cout << "Enter an а: ";
cin >> mas[j];
}
}
void Vyvod (int mas[], int kol_а) //функція виведення елементів
{int j;
for(j=0; j<kol_а; j++)
cout << setw(4) << mas[j];
if ( !((j+1)% 5) ) cout << endl;
}
Виведення елементів масиву можна організувати по-різному.
Виведення елементів одновимірного масиву поодинці в рядку:
#include "stdafx.h"
int main()
{
int intarray[5]= { 31, 54, 77, 52, 93 };
for(int j=0; j<5; j++)
cout << intarray[j] << endl;
_getch();
return 0;
}
Виведення елементів одновимірного масиву в строку без урахування їх розміщення:
int main()
{
int intarray[5]= { 31, 54, 77, 52, 93 };
for (int i=0; i<5; i++)
cout << intarray[i] << " ";
cout << endl;
_getch();
return 0;
}
Виведення елементів одновимірного цілочисельного масиву по K в рядку
#include <iomanip>
const int n=10;
int K =5;
int А[n]; //в стилі С++
for (int j=0; j<n; j++)
А[j]= j * 10; //заповнення масиву
for (int i=0; i<n; i++)
{cout << setw(7) << А[i]; //на елемент відводиться 7 позицій
if (!((i+1)% K)) cout << endl; //переклад терміни відбувається після виведення K=5 елементів
}
Наприклад, в припущенні, що на значення відводиться 8 позицій – разом із знаком і відступом від попереднього значення, маємо: #include <iomanip>
#include <stdlib.h>
const int n=10;
int main ()
{
int Random_array[n];
int a=5, b=10;
for (int index =0; index < n; index++)
Random_array [index] = а + rand() % b; //заповнення масиву
for (int i=0; i<n; i++)
{cout << setw(8);
cout << Random_array[i];
if (!((i+1) %5)) cout << endl; //виведення елементів масиву по 5 в рядку
}
cout << endl;
_getch();
return 0;
}
В цьому випадку елементи масиву будуть розташовані чіткими стовпцями.
Контрольні питання
-
Яким чином визначається масив?
-
Що є ознакою одновимірного масиву в мові програмування С++?
-
Чи відбувається автоматичний контроль виходу індексу за межі масиву?
-
Що виступає в якості характеристик масиву
Література:
-
Березін Б.І., Березін С.Б. Початковий курс С і C++. — М.: ДІАЛОГ-МІФІ, 1996
-
Ван Тассел Д. Стиль, розробка, ефективність, відладка і випробування програм. — М.: Світ, 1981.
-
Подбельський В.В. Мова Си++. — М.: Фінанси і статистика, 1996.
-
Паппас До., Мюррей У. Программирование на С і C++. — Київ: «Ірина»; BHV, 2000.