Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КП_ОР_1_(1+2)_23.doc
Скачиваний:
0
Добавлен:
02.01.2020
Размер:
308.74 Кб
Скачать

Комп’ютерний практикум № 1

МАСИВИ

    1. Одновимірні масиви

Мета роботи - ознайомитися з особливостями типу масиву, опанувати технологію використання одновимірних масивів даних, навчитися розробляти алгоритми та програми із застосуванням одновимірних масивів.

      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);

}

  • Окремі елементи масиву передаються у функцію за значенням.

Базовими операціями обробки одновимірних масивів є:

  • введення масиву, його ініціалізація;

  • виведення масиву;

  • пошук максимального або мінімального елемента масиву;

  • обчислення узагальнювальних характеристик (сум елементів, їх добутків, тощо);

  • пошук заданого елемента;

  • перестановка елементів або обмін значеннями між елементами масиву;

  • вставка та видалення елемента масиву.

Базові операції обробки масивів слід реалізовувати у вигляді функцій, які згодом можуть бути використані як «архітектурні блоки» при розв’язанні більш складних задач.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]