Урок 64 Інформатика (АП)
Методи впорядкування елементів
одновимірного масиву.
Мета.
Навчальна. Ознайомити учнів з методами впорядкування елементів одновимірного масиву (сортування вибором, сортування обміном(метод бульбашки)).
Розвиваюча. Розвивати логічне мислення, навички створення програм, самостійність, вміння застосовувати набуті знання до практичних завдань.
Виховна. Виховувати наполегливість, естетичність у оформленні, грамотно висловлювати свої думки.
Тип уроку. Засвоєння нових знань і навичок.
Матеріали для роботи з учнями:
План
Пам’ятка для учня!
Хід уроку
1. Перевірка домашнього завдання.
1) у зворотному порядку;
2) з парними індексами;
3) з непарними індексами;
4) що є недодатними числами;
5) що є невід'ємними числами;
6) що є парними числами;
7) що є непарними числами.
2. Актуалізація опорних знань.
Дано масив А[1..5]. Запишіть оператори, які виконують такі дії:
7. ввести з клавіатури значення елементів масиву;
8. вивести на екран значення елементів масиву;
9. знайти добуток елементів масиву;
10. знайти мінімальний елемент масиву;
11. знайти кількість додатних елементів;
12. знайти суму від'ємних елементів.
3. Мотивція.
При опрацюванні таблиць часто виникає потреба упорядкувати дані в таблиці за деякою ознакою. Числові дані можна відсортувати за величиною або абсолютною величиною ( наприклад, розташування в масиві значень ваги деталей за зростанням), рядкові дані - в алфавітному порядку (упорядкування описку учнів).
4. Методи впорядкування елементів одновимірного масиву.
Методи сортування масивів
Сортування елементів масиву - це упорядкування їх за деякою ознакою.
Для розв'язування задач сортування масивів існує багато алгоритмів різного ступеня складності, які відрізняються, переважно, швидкістю отримання результату. Розглянемо два найпростіших методи упорядкування елементів масиву.
Задача:
Var X: Array[1..10] of Real;
Упорядкувати масив X за неспаданням: Х[1] < Х[2] <...< Х[10].
Сортування вибором
Даний метод оснований на тому, що при кожному проході циклу переглядається частина масиву довжиною К елементів. При першому проході K=N, тобто в нашому прикладі К=10.
For К:=10 Downto 2 Do
Begin { пошук М-номера MAX(X[1..K])}
M:=l; MAX:=X[1];
For i:=2 To К Do
if х[і]>мах Then
Begin
MAX:=X[i]; M:=i;
End; {перестановка X[K] iX[M] }
C: = x[M]; x[M]:= X[K]; X[K]:= С
End;
Сортування обміном (метод бульбашки)
Метод бульбашки оснований на перестановці сусідніх чисел. Послідовно порівнюються пари сусідніх елементів Х[і] і Х[і+1] (і:1..N-1), і, якщо Х[i]>Х[i+1], то вони міняються місцями. У результаті першого перегляду послідовності на N-му місці буде найбільший з усіх елементів, тобто він, як «найлегший», наче спливає вгору. Потім переглядаються елементи від 1 до N-2; на (N-1)-му місці з’явиться елемент, найбільший серед (N-1) перших елементі і т.д. Перегляд послідовностей довжиною К продовжується до тих пір, поки К2:
К:=10;
whіle K>=2 Do Begin
for і:=1 To K-1 Do
if x[i]>x[i+l] Then Begin C:=X[i];
X[i]:=X[i+l];
X[i+l]:=C;
End;
K:=K-1;
End;
Для скорочення числа проходів можна змінити алгоритм шляхом введення допоміжної змінної Prap:Boolean. Так звана прапорцева змінна Ргар отримує значення True в тому випадку, якщо відбулась хоча б одна перестановка сусідніх елементів. Якщо значення Ргар не змінилось, це означає, що елементи масиву вже упорядковані і подальший перегляд послідовності значень не потрібний.
Repeat Prap:=False;
For і:=1 То 9 Do
if х[і]>х[і+1] Then Begin
C:=X[i]; X[i]:=X[i+l];
X[i+l]:=C;
Prap:= True
End
Until Not Prap;
5. Створення та реалізація програми.
Задача.
Дано масив А[1..10], значення якого задані випадковим чином і знаходяться в межах від 0 до 19. Упорядкувати масив.
Var A: Array [1..10] of Integer;
Опишіть змінні
М - індекс максимального елемента;
МАХ - максимальний елемент на К-му проході;
К - довжина частини масиву;
і - змінна для збереження індексу елемента масиву:
М, МАХ, к, і: integer;
Randomize;
For і: = 1 То 10 Do А[і]:= Random(20);
For і:= 1 то 10 Do Write (А[і]:3); WriteLn;
наприклад:
А | 12 | 3 | 11 | 14 | 8 | 5 | 17 | 6 | 19 | 10 |
В | 19 | 17 | 14 | 12 | 11 | 10 | 8 | 6 | 5 | 3 |
Алгоритм заповнення масиву В може бути таким: Для кожного і від 1 до 10 повторити дії:
For І:=1 То 10 Dо
Begin
MAX:=-1000;
For j:=l To 10 Do
If A[j]>MAX Then
Begin MAX:=A[j];
j:=k;
End;
B[i]=A[k]; A[k]:= -1000;
End;
Виведіть масив В на екран.
К:=10;
While К>=2 Do Begin
For і:=1 То к-1 Do
If А[і]>А[і+1] Then Begin
С:=А[і];
А[і]:=А[і+1];
А[і+1]:=С
End;
К:=К-1;
For і:=1 То К Do Write (А[і]: 4);
WriteLn;
End;
Запустіть програму на виконання і проаналізуйте хід сортування.
6. Питання до уроку.
У масиві А [1.. 10] переставити місцями елементи, що стоять на парних і непарних, місцях: А[1] <-> А[2], …, А[9] <-> А[10]. Заповніть пропуски в тексті програмного коду.
While 1<=... Do Begin
С:=А[і];
А[і]:=А[... ];
А[... ]:=С;
і:=...
End;
S:=S + Byte (А[і] >= А[і+1 ]) (Byte (True) = 1; Byte (False) = 0)
Початкове значення S дорівнює 0. Чому дорівнює кінцеве значення S, якщо вхідний масив було:
а) упорядковано за зростанням;
б) упорядковано за спаданням;
в) не упорядковано?
Запишіть фрагмент програмного коду, призначений для виконання таких дій:
For i:=1 То 3 Do Begin For j:=1 То 2 Do Write[j:2]; WriteLn End;
Запишіть протокол роботи циклів.
7. Домашнє завдання.
1) Дано одновимірний масив з 6 елементів. Визначити, чи є масив упорядкованим за зростанням або за спаданням. Якщо масив не упорядкований взагалі, вивести відповідь «Не упорядкована послідовність».
Блок-схема алгоритму розв'язування завдання наведена на малюнку.
2) Опишіть масив.
Var A: Array [1..6] of integer;
Опишіть змінні, які будуть необхідні для розв'язування задачі.
3) Запишіть оператори введення масиву А з клавіатури.
4) Перевіримо, чи є масив упорядкованим за неспаданням. Алгоритм розв'язування завдання: перебираємо всі елементи від 2-го до останнього. Якщо поточний елемент не більший за попередній, то прапорцевій змінній Ргар присвоюємо значення False. Якщо після перегляду масиву прапорцева змінна отримала значення False, - це означає, що послідовність не була зростаючою.
Ргар := True;
For і := 2 То б Do if а(і) <= а(і - 1) Then Ргар := False;
if Prap Then WriteLn ('За неспаданням’);
5) Додайте до оператора If, який перевіряє стан прапорцевої змінної Ргар, гілку Else і організуйте перевірку послідовності на незростання. Користуйтесь блок-схемою алгоритму.
6) Перевірте роботу програми для випадків упорядкованої за неспаданням, упорядкованої за незростанням, неупорядкованої послідовностей.