Цель: закрепление изученного материала по массивам, развитие навыка решения задач на обработку и сортировку двумерных массивов, развитие мышления, умения применять полученные знания при решении задач различной направленности.
Задачи:
- Воспитательная – развитие познавательного интереса, логического мышления.
- Учебная – совершенствование навыков составления программ на языках Pascal и Basic.
- Развивающая – развитие алгоритмического мышления, памяти, внимательности.
План урока.
- Организационный момент.
- Самостоятельная работа.
- Решение задач на обработку двумерных массивов.
- Объяснение нового материала «Алгоритмы сортировки»
- Закрепление изученного материала при решении задач.
Ход урока.
1. Организационный момент.
Объявление целей, задач и плана урока.
2. Самостоятельная работа (Приложение 1).
Работа предполагает проверку знаний учащихся по описанию массивов, расположению элементов матрицы, умение читать программный код и решать задачи по вводу и выводу элементов массива в определенной последовательности.
3. Решение задач
В Приложении 2 находятся: тестирование программы, исполнение алгоритма и блок-схема к задачам, программные коды на языках программирования Pascal и Basic. Разны цвета кода обозначают исполнение отдельного цикла.
Пример 3.1. Вычислить суммы элементов столбцов заданной матрицы A(N, M).
Пример 3.2. Подсчитать, сколько раз встречается в заданной целочисленной матрице A(N, M) максимальное по величине число.
Пример 3.3. В заданной матрице A(N, M) поменять местами строки с номерами P и Q (1 <= P <= N, 1 <= Q <= N).
4. Объяснение нового материала по теме «Алгоритмы сортировки».
Рассмотрим простой алгоритм сортировки, называемый пузырьковой сортировкой или сортировкой методом обмена. Задача заключается в том, чтобы отсортировать исходный массив целых чисел так, чтобы элементы располагались в нем в порядке возрастания. В пузырьковой сортировке последовательно просматриваются пары соседних элементов массива, и если левый элемент пары больше правого, то есть порядок нарушен, то они меняются местами (отсюда происходит название «метод обмена»). В результате самый большой элемент массива оказывается на своем законном последнем месте. Он как бы «всплывает» наверх подобно пузырькам в стакане газировки, самые большие из которых проталкиваются к поверхности (отсюда второе название метода - пузырьковая сортировка). Для того чтобы все элементы оказались на своих местах, надо проделать процедуру просмотра и обмена элементов несколько раз. Сколько именно, выясним на примере.
Пусть задан антиупорядоченный массив В = (20,10,8,7,5,2), тогда шаги сортировки будут выглядеть следующим образом:
На первом шаге вначале сравниваются 1-й и 2-й элементы массива - 20 и 10. Так как 20 > 10, они меняются местами, в результате элемент 20 оказывается на 2-м месте. Затем сравниваются 2-й и 3-й элементы массива, а именно 20 и 8, и они меняются местами. В результате элемент 20 оказывается уже на 3-м месте и т.д. Последними сравниваются 5-й и 6-й элементы массива (на 5-м месте к этому моменту находится 20) и также меняются местами. После выполнения 1-го шага элемент 20 перемещается на последнее место. Запомним, что на первом шаге выполнялось сравнение следующих элементов: 1-го и 2-го, 2-го и 3-го, 3-го и 4-го, 4-го и 5-го, 5-го и 6-го.
На втором шаге все действия первого шага повторяются, но последними сравниваются 4-й и 5-й элементы, т.е. 10 и 2, и они меняются местами: 5-й и 6-й элементы сравнивать не имеет смысла, так как на предыдущем шаге на 6-е место был передвинут самый большой элемент.
На третьем шаге выполняется сравнение элементов 1-го и 2-го, 2-го и 3-го, 3-го и 4-го, так как 5-й и 6-й элементы уже стоят на своих местах.
На четвертом шаге выполняется сравнение элементов только в двух парах, а именно 1-го и 2-го, 2-го и 3-го.
На пятом шаге сравниваются и переставляются первый и второй элементы массива - 5 и 2, остальные элементы, начиная с третьего, уже располагаются в порядке возрастания.
После того как правильно расставлены 5 элементов массива, 6-й (наименьший элемент) «автоматически» оказывается на 1-м месте.
Итак, для сортировки массива из 6 элементов понадобилось выполнить 5 шагов. Легко догадаться, что отсортировать массив, состоящий из п чисел, можно, выполнив п — 1 шагов.
Перейдем к построению алгоритма. Задан массив А[1..n] из п элементов. Обозначим переменной i номер шага выполнения сортировки, а переменной j - номер первого элемента в паре элементов A[j], A[j +1], которые надо сравнивать.
i = 1: просматриваются пары, в которых номер j изменяется от 1 до п -1 (последними сравниваются элементы, A[n-1],A[n]).
i = 2: просматриваются пары, в которых номер j изменяется от 1 до n-2 (последними сравниваются элементы A[n-2], А[п-1]).
i= 3 : просматриваются пары, в которых номер j изменяется от 1 до п — 3 (последними сравниваются элементы A[n —3], А[п-2]).
…
i = n-1: просматриваются пары, в которых номер j изменяется от 1 до п - (п -1) = 1 (сравниваются только элементы А [1], A[2]).
Из описанного выше можно сделать следующие выводы:
- всего выполняется (п —1) шагов, то есть переменная i изменяется от 1 до (n -1);
- на i-м шаге просматриваются пары, в которых номеру изменяется от 1 до (n-1) .
Опишем алгоритм в словесно-пошаговой форме (t - переменная для обмена значений элементов).
- Задать массив A[1..n] (элементы массива можно ввести с клавиатуры, задать с помощью генератора псевдослучайных чисел или прочитать из файла).
- i:=1.
- Если i < п, то перейти к пункту 4, иначе перейти к пункту 9.
- j:=1.
- Если j < п - i, то перейти к пункту 6, иначе i-й шаг сортировки выполнен, перейти к пункту 8.
- Если A[j]>A[ j + 1], то поменять их местами: t:=A[j]; A[j]: =A[j + 1];A[j +1l]: = t.
- Увеличить номеру (j:=j+1) и перейти к пункту 5.
- Увеличить номер / (i:=i+1) и перейти к пункту 3.
- Сортировка массива завершена. Вывод массива.
Для перехода к программной реализации обратим внимание на то, что пункты 4, 5, 6, 7 составляют внутренний цикл, в котором переменная j изменяется от 1 до (п -1), а в пунктах 2, 3 и 8 записаны условия выполнения внешнего цикла, в котором переменная iизменяется от 1 до (n—1).
Программа пузырьковой сортировки массива
Program Bubble;
Const n=10;
Var A: array [l..n] of real; {массив вещественных чисел}
i, j:integer;
t: real; {переменная для обмена должна быть такого же типа, как и элементы массива!}
begin
for i:=l to n do read(A[i]); {создание массива}
{сортировка}
for i:=l to n-1 do for j:=1 to n-i do
if A[j]>A[j+l] then £>
begin
t:= A[j] ;
A[j] := A[j+1] ;
A[j+1] :=t;
end;
for i:=l to n do
write(A[i] :3:1, ' '); {вывод отсортированного массива}
end.
Существуют разновидности алгоритма сортировки пузырьковым методом пузырька. Можно выполнять сортировку, просматривая элементы не сначала, а с конца массива, тогда маленькие элементы будут постепенно перемещаться в начало массива.
Еще один вариант пузырьковой сортировки базируется на следующем наблюдении. Если на очередном шаге не было сделано ни одного обмена, то массив уже упорядочен и выполнять остальные шаги не надо (особенно эффективен этот подход, если нам дан уже упорядоченный массив). Для определения, что не было произведено ни одного обмена, используют булеву переменную, значение которой делают равным trueпри выполнении условия A[j]>A[j + 1], а перед выполнением очередного шага сортировки ее значение изменяют на false. Если после выполнения шага ее значение так и осталось равным false, то сортировку завершают.
Выводы:
Метод поиска минимального (максимального) элемента, или сортировка выбором.
Отыскивается минимальный (максимальный) элемент и переносится начало (конец) массива. Затем этот метод применяется ко всем элементам, кроме первого (последнего) (он уже находится на своем окончательном месте), и т. д.
Метод пузырька, или сортировка обменом.
Последовательно сравниваются пары соседних элементов аk и a k+1 (k=1,2,…,n-1) и, если аk> a k+1, то они переставляются; таким образом наибольший элемент окажется на своем месте в конце массива. Затем этот метод применяется ко всем элементам, кроме последнего и т. д.
Метод вставок.
Пусть первые k элементов массива уже упорядочены по возрастанию. Берется (k+ 1)-й элемент и размещается среди первых к элементов так, чтобы упорядоченными оказались уже (k + 1) первых элементов. Этот метод применяется при k от до (n - 1).
Упражнения.
Упражнения этого раздела помогут вам глубже понять и запомнить два важных метода сортировки: метод выбора и метод «пузырька».
- Какой смысл имеет фраза: «Выполнить сортировку данных»?
- В каком из известных вам методов на каждом шаге сортировки выбирается минимальный элемент?
- Задан массив целых чисел A[1..7]. Требуется упорядочить элементы в нем по возрастанию, применяя метод «пузырька» так, чтобы на каждом шаге алгоритма очередной наибольший элемент передвигался на свое место. Покажите, как будет выглядеть массив после каждого шага сортировки.
4. Подведение итогов урока.
Что является затруднительным. Проговорить алгоритм выполнения домашнего задания.
5. Домашнее задание.
1. Заполните схему алгоритма сортировки элементов массива A[1..n] по возрастанию методом «пузырька»
2. Провести сортировку списка фамилий учеников класса по алфавиту.
Описание: Будем считать, что фамилии учеников начинаются с разных букв. Тогда задача сводится к сравнению первых букв фамилий и сортировке фамилий в алфавитном порядке. Будем использовать следующие обозначения: а — массив строкового типа, содержащий фамилии учеников класса; n — размер массива (количество элементов в массиве).
Литература
- Андреева Е.В. Методика обучения основам программирования на уроках информатики. М.: Педагогический университет «Первое сентября», 2006.
- Ракитина Е.А., Бешенков С.А., Галыгина И.В., Милохина Л.В. Сборник типовых задач по информатике. М.: Образование и информатика, 2005
- Тимошевская Н.Е. Задачник по программированию на языке Pascal. Томск, 2004