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

2. Алгоритми обробки масивів. Алгоритм послідовного пошуку. Пошук максимального (мінімального) елемента. Масиви даних

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

Індекс – це порядковий номер елемента в масиві; індекс першого елемента ЗАВЖДИ 0, далі йдуть натуральні числа (1, 2, …).

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

<тип масиву> <ім’я масиву> [вираз, що задає кількість елементів];

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

Для звертання до масиву досить вказати його для доступу до його елемента вказують масиву та, у квадратних дужках, через кому, значення відповідних індексів даного елемента. Наприклад, B[1] – перший елемент масиву B, Y1[i] – i-й елемент масиву Y1, SS[5,2] – елемент двовимірного масиву SS, який стоїть на перетині п’ятого рядка та другого стовпчика.

Одновимірні масиви (вектори)

Приклади опису одновимірних масивів змінних:

float array[12]; //Масив array, що складається з 12 елементів типу float

int Nums[3*10]; // Масив Nums, що складається з 30 елементів цілого типу

int count = 15, double[count]; /*Помилковий запис, оскільки змінна не може задавати розмір масиву */

Константний вираз, що визначає розмір масиву, НЕ МОЖЕ приймати нульове значення!

Як і звичайні змінні, масиви при оголошенні можуть бути явно проініціалізовані. Для цього при оголошенні поміщається список початкових значень елементів, написаних в фігурних дужках:

char array[5] = {‘A’, ‘E’, ‘4’, ‘0’, ‘U’);

Тут оголошений масив з п’яти елементів, всі елементи цього масиву проініціалізовані відповідними значеннями. Кількість ініціалі­заторів елементів масиву не повинно перевищувати його розмірність, інакше буде видано повідомлення про помилку. Наступний приклад оголошення показує, що ініціалізувати можна не всі елементи, а будь-яка кількість перших:

int array[15] = {3, 5, 10, 16};

Всі інші одинадцять елементів будуть проініціалізовані нулями.

Порядок роботи з масивом:

1) оголосити про масив у описів, вказавши його розмір тип елементів, що в нього входять (тобто приготувати місце в пам'яті, де будуть зберігатися значення елементів);

2) заповнити необхідними значеннями масив для розв'язування задачі;

3) якщо треба, вивести масив на екран для зорової перевірки роботи з ним;

4) робота з даним масивом;

5) виведення отриманих результатів.

Методи заповнення одновимірного масиву:

1) за формулою:

for (int i=0; i<10; i++)

nums[і] = i * i - 10 {або будь-яка інша формула};

2) з клавіатури:

for (int i=0; i<10; i++)

{

printf(“Введіть М[%d]: “, i);

scanf(“%d”, &nums[i]);

}

3) випадковим чином (генератором випадкових чисел) проміжку [А, В]:

for (int i=0; i<10; i++)

nums[і] = rand(B-A)+A;

Методи виведення елементів одновимірного масиву на екран

1) виведення у стовпчик:

for (int i=0; i<10; i++)

printf(“nums [%d]=%d\n“, i, nums[i]);

2) виведення у рядок із табулюванням:

for (int i=0; i<10; i++)

printf(“nums [%d]=%d\t“, i, nums[i]);

Розглянемо сортування обміном (метод "Бульбашки").

Сортування обміном - метод, при якому всі сусідні елементи масиву попарно порівнюються один з одним і міняються місцями в тому випадку, якщо попередній елемент більше подальшого. В результаті цього максимальний елемент поступово зміщується вправо і, врешті-решт, займає

праве місце в масиві, після чого він виключається з подальшої обробки.

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

Якщо послідовність сортованих чисел розташувати вертикально ( перший елемент - внизу ) і прослідити за переміщеннями елементів , то можна побачити, що великі елементи, подібно бульбашкам повітря у воді, "впливають" на відповідну позицію. Тому "сортування" таким чином

називають ще сортуванням методом "бульбашки", або "бульбашковим сортуванням".

Класичний приклад застосування методу – бінарний пошук в упорядкованому масиві. Масив розбивається на дві рівні частини Використовуючи потім два порівняння, алгоритм або знаходить елемент, або визначає ту половину, у якій варто шукати – тобто зводить задачу розміру n до задачі розміром n/2. Задача2. Бінарний пошук в упорядкованому масиві. Дано: yпорядкований масив A[1..n] і елемент b. Необхідно відповісти на питання: присутній чи ні елементі b у масиві A. Задача пошуку істотнo спрощується, якщо елементи масиву упорядковані. Стандартний метод пошуку в упорядкованому масиві – це метод розподілу відрізка навпіл, причому відрізком є відрізок індексів елементів масиву – 1..n. Розв’язування:

  • Крок бінарного пошуку полягає у порівнянні шуканого елемента із середнім елементом A[1..m], де m - деякий індекс (k<1). На першому кроці алгоритму k=1, l=n.

  • Якщо шуканий елемент bA[m] – праворуч від m, тобто на відрізку m+1..l.

  • Для того, щоб кількість обчислень була однакова, індекс m потрібно вибирати так, щоб довжини відрізків k..m, m..l були (приблизно) рівними, тобто m:=(k+1) div2.

  • Якщо на будь-якому кроці алгоритму виконується умова A[m]=b, це означає, що елемент b є присутнім у масиві, і його індекс дорівнює m.

  • Якщо не на жодному з кроків алгоритму не виконалась умова A[m]=b і значення змінних l і k стали такі, що l

Лінійний пошук - алгоритм послідовного пошуку знаходження заданого значення довільної функції на деякому її відрізку. Цей алгоритм є найпростішим алгоритмом пошуку і на відміну, наприклад, від двійкового пошуку, не накладає жодних обмежень на функцію і має просту реалізацію. Пошук значення функції здійснюється простим порівнянням чергового розглянутого значення (як правило пошук відбувається зліва направо, тобто від менших значень аргументу до більших) і, якщо значення збігаються (з тією або іншою точністю), то пошук вважається завершеним

Білет10