- •1. Загальні відомості 7
- •1. Загальні відомості
- •1.1. Структура програми
- •1.2. Типи даних
- •2. Лабораторна робота 1. «Обчислення арифметичних виразів» (2 год.)
- •2.1. Теоретичні відомості
- •2.2.1. Приведення типів
- •2.2. Постановка задачі
- •2.3. Варіанти
- •2.4. Методичні вказівки
- •Постановка задачі.
- •3.1. Теоретичні відомості
- •3.1.1. Умовний оператор if-else
- •3.1.2. Оператор вибору switch
- •3.1.3. Оператори циклу
- •3.1.4. Приклад. Побудова геометричної фігури
- •3.2. Постановка задачі
- •3.3. Варіанти
- •3.4. Методичні вказівки
- •Постановка задачі.
- •4. Лабораторна робота 3. «Обчислення ряду. Форматне введення-виведення даних» (2 год.)
- •4.1. Теоретичні відомості
- •4.1.1. Поняття ряду. Ітераційний процес
- •4.1.2.Форматне виведення даних
- •4.1.3.Форматне введення
- •4.1.4. Приклад. Програма обчислення ряду
- •4.2. Постановка задачі
- •4.3. Варіанти
- •4.4. Методичні вказівки
- •Постановка задачі.
- •5. Лабораторна робота 4. «Функції. Ітераційні процеси» (4 год.)
- •5.1. Теоретичні відомості
- •5.1.1.Ступеневі ряди
- •5.2. Постановка задачі
- •5.3. Варіанти
- •5.4. Методичні вказівки
- •Постановка задачі.
- •6. Лабораторна робота 5. «Масиви й покажчики. Введення й виведення елементів» (2 год.)
- •6.1. Теоретичні відомості
- •6.1.1. Оголошення масиву
- •6.1.2. Масиви й покажчики
- •6.1.3. Записи «покажчик-зсув» і «покажчик-індекс»
- •6.1.4. Пошук найменшого й найбільшого елементів масиву
- •6.2. Постановка задачі
- •6.3. Варіанти
- •Постановка задачі.
- •7.1.2. Масив випадкових чисел
- •7.1.3. Видалення елемента із масиву
- •7.1.4. Вставка елемента в масив
- •7.1.5. Перестановка двох елементів
- •7.1.6. Циклічна перестановка елементів
- •7.2. Постановка задачі
- •7.3. Варіанти
- •Постановка задачі.
- •8.1.2. Передача масиву у функцію
- •8.1.3. Приклад. Функції введення й виведення елементів матриці
- •8.2. Постановка задачі
- •8.3. Варіанти
- •8.4. Методичні вказівки
- •Постановка задачі.
- •9. Лабораторна робота 8. «Сортування масивів» (4 год.)
- •9.1. Теоретичні відомості
- •9.1.1. Метод обміну (бульбашковий)
- •9.1.2. Метод прямого вибору
- •9.1.3. Метод вставок
- •9.1.4. Порівняння ефективності алгоритмів сортування
- •9.1.5. Генерація псевдовипадкових чисел
- •9.2. Постановка задачі
- •9.3. Методичні вказівки
- •Постановка задачі.
- •10. Лабораторна робота 9. «Рядки» (4 рік.)
- •10.1. Теоретичні відомості
- •10.1.1. Функції для роботи із символами
- •10.1.2. Строкові константи
- •10.1.3. Рядки як масиви
- •10.1.4. Передача рядка у функцію
- •10.1.4. Уведення/виведення символів і рядків
- •10.1.4. Функції обробки рядків
- •10.2. Постановка задачі
- •10.3. Варіанти
- •10.4. Методичні вказівки
- •Постановка задачі.
- •Література
9.1.2. Метод прямого вибору
При сортуванні цим методом фіксується перший лівий елемент масиву й проглядається права частина масиву (N-1) елементів. Шукається найменший елемент праворуч. Якщо знайдений елемент менше першого, він переставляється з першим елементом. Далі фіксується другий елемент масиву й проглядаються (N-2) елементів праворуч. Розшукується найменший елемент і переставляється з елементом 2. Подібна процедура триває доти, поки не залишиться найбільший елемент.
Наведемо приклад функції selectSort, що здійснює сортування масиву методом прямого вибору: У списку аргументів є: покажчик на масив *a; розмір масиву num; посилання на змінну &mov, що враховує число пересилань..
void selectSort(int *a, int num, int &mov){
for (int i=0; i<num-1; i++){ //Задати лівий ел-т
int min = i; //Змінна для індексу мінімального ел-та
for (int j=i+1; j<num; j++) //Задати правий ел-т
if (a[j]<a[min]) min=j; //Порівняти із мінімальним
if (min!=i){ //Якщо знайдено ел-т, що менше лівого
swap(a[min],a[i]); //Переставити лівий і мінімальний
mov+=3;
display(a, num); //Вивести на екран перестановку };
}
}
Приклад сортування масиву методом вибору (білим кольором показані елементи, які не змінюються при ітерації, сірим кольором – елементи, що міняються місцями):
Вихідний масив |
22 |
19 |
14 |
23 |
18 |
1-я ітерація |
14 |
19 |
22 |
23 |
18 |
2-я ітерація |
14 |
18 |
22 |
23 |
19 |
3-я ітерація |
14 |
18 |
19 |
23 |
22 |
4-я ітерація |
14 |
18 |
19 |
22 |
23 |
9.1.3. Метод вставок
Елементи масиву розміром N умовно розділяють на готову (упорядковану) послідовність і вхідну послідовність. Спочатку в готову послідовність включається один елемент – a[0]. Вхідна послідовність починається з елемента a[1]. Ці елементи порівнюються, і якщо a[1]<a[0], елементи обмінюються місцями. На кожній ітерації вибирається перший елемент вхідної послідовності й передається в готову послідовність шляхом вставки. Місце вставки визначається порівнянням цього елемента з елементами готової послідовності. Ітерації тривають, поки довжина готової послідовності не стане рівній N.
Запишемо функцію сортування методом вставок insertSort, у списку аргументів якої: *a - покажчик на масив; num - розмір масиву; &mov - посилання на змінну, що враховує число пересилань.
void insertSort(int *a, int num, int &mov){
int i, j, key;
for(i = 1; i <num; i++){ //Взяти 1-й ел-т вхідної посл-сті
key = a[i];
mov++;
j = i - 1;
while (a[j] > key){ //Порівняти ел-ти готової посл-ти з key,
a[j+1] = a[j]; //Ел-ти > key зсунути вправо на 1 позицію
mov++;
j--;
}
if(a[j+1]!=key){ //Вилучити перестановки однакових ел-тів
a[j+1] = key; //Вставити key у місце, що звільнилося mov++;
display(a, num);
}
}
}
Наведемо приклад сортування методом включень (білі комірки - вхідна послідовність, сірі комірки - готова послідовність):
Вихідний масив |
22 |
19 |
14 |
23 |
18 |
1-я ітерація |
19 |
22 |
14 |
23 |
18 |
2-я ітерація |
14 |
19 |
22 |
23 |
18 |
3-я ітерація |
14 |
19 |
22 |
23 |
18 |
(N-1)-я ітерація, вхідна послідовність вичерпана |
14 |
18 |
19 |
22 |
23 |
Відзначимо, що у функції сортування insertSort завдяки умові if(a[j+1]!=key) виключені ітерації, при яких не виконується вставка (у даному прикладі – це 3-я ітерація).