- •1.Технология программирования. Основные понятия и подходы 8
- •Технология программирования. Основные понятия и подходы
- •1.1. Технология программирования и основные этапы ее развития
- •1.2. Жизненный цикл и этапы разработки программного обеспечения
- •Контрольные вопросы
- •2.Разработкаструктуры программы и модульное программирование
- •2.1. Цель модульного программирования
- •2.2. Основные характеристики программного модуля
- •2.3. Методы разработки структуры программы
- •Контрольные вопросы
- •3.Тестирование и отладка программного средСтВа
- •3.1. Принципы и виды отладки программного средства
- •3.2. Заповеди отладки программного средства
- •3.3. Автономная отладка программного средства
- •3.3. Комплексная отладка программного средства
- •Контрольные вопросы
- •4. Обеспечение качества программного средства
- •4.1. Общая характеристика процесса обеспечения качества программного средства
- •4.2. Обеспечение легкости применения программного средства
- •4.3. Обеспечение эффективности программного средства
- •4.4. Обеспечение сопровождаемости программного средства
- •Контрольные вопросы
- •5. Документирование программных средств составление программной документации
- •5.1. Виды программных документов
- •5.2. Пояснительная записка
- •5.3. Руководство пользователя
- •5.4. Руководство системного программиста
- •5.5. Основные правила оформления программной документации
- •Контрольные вопросы
- •6. Объектный подход к разработке программных средств
- •6.1. Объекты и отношения в программировании. Сущность объектного подхода к разработке программных средств
- •6.2. Особенности объектного подхода к разработке внешнего описания программного средства
- •6.3. Особенности объектного подхода на этапе конструирования программного средства
- •Контрольные вопросы
- •7. Постановка и алгоритмизация задач
- •7.1. Понятие алгоритма
- •7.2. Способы описания алгоритмов
- •Условные обозначения блоков
- •7.3. Структурные схемы алгоритмов
- •Контрольные вопросы
- •8. Основы языка
- •8.1. Алфавит языка
- •8.2. Структура программы
- •Контрольные вопросы
- •9. Типы данных
- •9.1. Целые типы
- •9.2. Вещественные типы
- •9.3. Логический тип
- •9.4. Символьный тип
- •9.5. Выражения
- •Арифметические операции
- •Операция отрицания
- •Операции конъюнкция, дизъюнкция, «исключающее» или
- •Приоритет операций
- •9.6. Константы
- •9.7. Совместимость типов данных
- •Контрольные вопросы
- •10. Линейные алгоритмы
- •10.1. Пустой и составной операторы
- •10.2. Оператор присваивания
- •10.3. Простейший ввод и вывод
- •Контрольные вопросы
- •11. Разветвляющиеся алгоритмы
- •11.1. Оператор перехода
- •11.2. Условный оператор
- •11.3. Оператор выбора
- •Контрольные вопросы
- •12. Циклические алгоритмы
- •12.1. Циклы с параметром
- •12.2. Циклы с условием
- •Контрольные вопросы
- •13. Пользовательские типы данных
- •13.1. Перечисляемый тип
- •13.2. Тип - диапазон
- •13.3. Массивы
- •13.4. Записи
- •13.5. Множества
- •Контрольные вопросы
- •14. Работа со строками
- •Контрольные вопросы
- •15. Процедуры и функции
- •15.1. Параметры-значения
- •15.2. Параметры-переменные
- •15.3. Параметры-константы
- •15.4. Открытые параметры-массивы
- •15.5. Бестиповые параметры
- •15.6. Процедурные типы
- •15.7. Рекурсия
- •Контрольные вопросы
- •16. Типизированные константы
- •Контрольные вопросы
- •17. Модули
- •Interface
- •Implementation
- •Interface
- •18.2. Поиск с барьером
- •83.3. Двоичный (бинарный) поиск
- •Контрольные вопросы
- •19. Алгоритмы сортировки
- •19.1. Сортировка выбором
- •19.2.Сортировка обменом (методом «пузырька»)
- •19.3. Сортировка включением
- •Контрольные вопросы
- •20. Файлы
- •20.1. Текстовые файлы
- •20.2. Компонентные файлы
- •20.3. Бестиповые файлы
- •20.4. Последовательный и прямой доступ
- •Контрольные вопросы
- •21.Программирование с использованием динамической памяти
- •21.1. Указатели и операции над ними
- •21.2. Процедуры и функции, работающие с указателями
- •Контрольные вопросы
- •22. Модуль crt (основные возможности)
- •Контрольные вопросы
- •22. Модуль graph (основные возможности)
- •22.1. Базовые процедуры и функции
- •22.2. Экран и окно в графическом режиме
- •22.3. Вывод точки
- •22.4. Вывод линии
- •22.5. Построение прямоугольников
- •22.6. Построение многоугольников
- •22.7. Построение дуг и окружностей
- •22.8. Работа с текстом
- •Контрольные вопросы
- •Заключение
- •Библиографический список
Контрольные вопросы
Сформулируйте назначение алгоритмов поиска.
Перечислите виды алгоритмов поиска.
Охарактеризуйте линейный поиск.
Охарактеризуйте поиск с барьером.
Назовите достоинства и недостатки каждого из поисков.
19. Алгоритмы сортировки
Простейшая задача сортировки заключается в упорядочении элементов массива по возрастанию или убыванию. Другой задачей является упорядочение элементов массива в соответствии с некоторым критерием. Обычно в качестве такого критерия выступают значения определенной функции, аргументами которой выступают элементы массива. Эту функцию принято называть упорядочивающей функцией.
Существуют различные методы сортировки. Будем рассматривать каждый из методов на примере задачи сортировки по возрастанию массива из n целых чисел.
19.1. Сортировка выбором
Идея метода заключается в том, что находится максимальный элемент массива и меняется местами с последним элементом (с номером n). Затем, максимум ищется среди элементов с первого до предпоследнего и ставится на n–1 место, и так далее. Необходимо найти n–1 максимум. Можно искать не максимум, а минимум и ставить его на первое, второе и так далее место. Также применяют модификацию этого метода с одновременным поиском максимума и минимума. В этом случае количество шагов внешнего цикла n div 2.
Вычислительная сложность сортировки выбором – величина порядка n*n, что обычно записывают как o(n*n). Это объясняется тем, что количество сравнений при поиске первого максимума равно n–1. Затем n–2, n–3, и так далее до 1, итого: n*(n–1)/2.
Пример 19.1: Сортировка выбором по возрастанию массива a из n целых чисел.
program sort_vybor1;
var a : array[1..100] of integer;
n, i, m, k, x : integer;
begin
write('количество элементов массива ');
read(n);
for i:=1 to n do read(a[i]);
for k:=n downto 2 do { k – количество элементов для поиска max }
begin
m:=1; { m – место max }
for i:=2 to k do if a[i]>a[m] then m:=i;
{меняем местами элементы с номером m и номером k}
x:=a[m]; a[m]:=a[k]; a[k]:=x;
end;
for i:=1 to n do write(a[i],' '); {упорядоченный массив}
end.
Пример 19.2: Та же задача с одновременным выбором max и min.
program sort_vybor2;
var a:array[1..100] of integer;
n, i, m, k, x, p : integer;
begin
write('количество элементов массива ');
read(n);
for i:=1 to n do read(a[i]);
for k:=1 to n div 2 do { k – номер пары max и min }
begin
m:=k; { m – место max }
p:=k; { p – место min }
{max и min ищутся среди элементов с k до n–k+1}
for i:=k+1 to n–k+1 do
if a[i]>a[m] then m:=i
else if a[i]<a[p] then p:=i;
{меняем местами элементы с номером p и номером k}
x:=a[p]; a[p]:=a[k]; a[k]:=x;
if m=k then m:=p;
{если max стоял на месте k, то сейчас он на месте p}
{меняем местами элементы с номером m и номером n–k+1}
x:=a[m]; a[m]:=a[n–k+1]; a[n–k+1]:=x;
end;
for i:=1 to n do write(a[i],' '); {упорядоченный массив}
end.
19.2.Сортировка обменом (методом «пузырька»)
Идея метода заключается в том, что последовательно сравниваются пары соседних элементов массива. Если они располагаются не в том порядке, то совершаем перестановку, меняя местами пару соседних элементов. После одного такого прохода на последнем месте номер N окажется максимальный элемент («всплыл» первый «пузырек»). Следующий проход должен рассматривать элементы до предпоследнего и так далее. Всего требуется n–1 проход. Вычислительная сложность сортировки обменом o(n*n).
Пример 19.3: Сортировка обменом по возрастанию массива a из n целых чисел. (Базовый вариант)
program Sort_Obmen1;
var a : array[1..100] of integer;
n, i, k, x : integer;
begin
write('количество элементов массива ');
read(n);
for i:=1 to n do read(a [i]);
for k:= n –1 downto 1 do { k – количество сравниваемых пар }
for i:=1 to k do
if a [i]> a [i+1] then
{меняем местами соседние элементы}
begin x:= a [i]; a [i]:= a [i+1]; a [i+1]:=x; end;
for i:=1 to n do write(a [i],' '); {упорядоченный массив}
end.
Можно заметить, что если при выполнении очередного прохода в сортировке обменом не произведено ни одной перестановки, то это означает, что массив уже упорядочен. Таким образом, можно модифицировать алгоритм, чтобы следующий проход делался только при наличии перестановок в предыдущем.
Пример 19.4: Сортировка обменом с проверкой факта перестановки.
program sort_obmen2;
var a : array[1..100] of integer;
n, i, k, x : integer; p : boolean;
begin
write('количество элементов массива ');
read(n);
for i:=1 to n do read(a[i]);
k:= n –1; {количество пар при первом проходе}
p:=true; {логическая переменная p истинна, если были
перестановки, т.е. нужно продолжать сортировку}
while p do
begin
p:=false;
{Начало нового прохода. Пока перестановок не было.}
for i:=1 to k do
if a[i]>a[i+1] then
begin
x:=a[i]; a[i]:=a[i+1]; a[i+1]:=x;
{меняем элементы местами}
p:=true; {и запоминаем факт перестановки}
end;
k:=k–1;
{уменьшаем количество пар для следующего прохода}
end;
for i:=1 to n do write(a[i],' '); {упорядоченный массив}
end.
Следующая модификация алгоритма сортировки обменом получается при запоминании места последней перестановки. Если при очередном проходе последней парой элементов, которые поменялись местами, были a[i] и a[i+1], то элементы массива с i+1 до последнего уже стоят на своих местах. Использование этой информации позволяет нам сделать количество пар для следующего прохода равным i–1.
Пример 19.5: Сортировка обменом с запоминанием места последней перестановки.
program sort_obmen3;
var a : array[1..100] of integer;
n, i, k, x , m : integer;
begin
write('количество элементов массива ');
read(n);
for i:=1 to n do read(a[i]);
k:=n–1; {количество пар при первом проходе}
while k>0 do
begin
m:=0;
{пока перестановок на этом проходе нет, место равно 0}
for i:=1 to k do
if a[i]>a[i+1] then
begin
x:=a[i]; a[i]:=a[i+1]; a[i+1]:=x; {меняем элементы местами}
m:=i; {и запоминаем место перестановки}
end;
k:=m–1; {количество пар зависит от места последней перестановки}
end;
for i:=1 to n do write(a[i],' '); {упорядоченный массив}
end.