- •Ответственный за выпуск: Бивойно п.Г. , декан факультета электронных и информационных технологий, канд. Техн. Наук, доцент
- •Содержание
- •Лабораторная работа № 7. Одномерные массивы
- •Краткие теоретические сведения о массивах
- •Понятие массив
- •Объявление массива
- •Передача массивов в процедуры и функции
- •Операции с массивами
- •Типовые процедуры и функции для работы с массивами
- •Описание типа учебного массива
- •Процедуры создания, ввода и вывода массивов
- •Процедура создания случайного массива
- •Процедура ввода массива из строки текста
- •Процедура ввода массива из компонента tMemo
- •Процедура ввода массива с помощью функции InputBox
- •Функция преобразования массива в строку символов
- •Процедура вывода массива в компонент tMemo
- •Обработка массивов
- •Функция вычисления суммы элементов массива
- •Процедура определения минимального, максимального, и их индексов в массиве
- •Функция определения позиции элемента в массиве
- •Процедура удаления элементов из массива
- •Процедура переворота массива
- •Процедура циклического сдвига части элементов массива влево
- •Процедура формирования массива накопленных значений
- •Задание для самостоятельной работы
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 8. Сортировка массивов
- •Методы сортировки массивов
- •Сортировка выбором
- •Пример сортировки массива по возрастанию методом выбора
- •Процедура сортировки массива методом выбора
- •Сортировка обменом (метод пузырька)
- •Пример сортировки массива по возрастанию методом обмена
- •Процедура сортировки массива методом обмена
- •Сортировка вставкой или включением
- •Пример сортировки массива по возрастанию методом вставки
- •Процедура сортировки методом вставки
- •Сортировка по усложненным правилам
- •Обработка упорядоченных массивов
- •Вставка элемента в отсортированный массив
- •Слияние двух отсортированных массивов в один
- •Поиск позиции элемента в отсортированном массиве
- •Удаление элемента из отсортированного массива
- •Задание для самостоятельной работы
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 9. Работа с двумерными массивами (матрицами)
- •Краткие теоретические сведения
- •Описание матриц
- •Использование компонента StringGrid для ввода-вывода матриц
- •Тотальная обработка данных в матрицах
- •Выборочная обработка матрицы
- •Перестановки элементов матрицы
- •Удаление и вставка элементов матрицы
- •Сортировка элементов матрицы
- •Задание для самостоятельной работы
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 10. Работа с записями
- •Краткие теоретические сведения
- •Объявление типа для записи
- •Массивы записей
- •Поля записей как массивы
- •Сортировка массивов записей
- •Ввод-вывод записей
- •Создание проекта «Результаты аттестации»
- •Интерфейс пользователя для проекта
- •Определение типов данных
- •Инициализация интерфейса
- •Добавление строки в таблицу
- •Удаление строки из таблицы
- •Процедура создания массива записей по содержимому StringGrid
- •Процедура отображения массива в компоненте StringGrid
- •Процедура сортировки массива записей по группе и фамилии
- •Сортировка записей по количеству неудовлетворительных оценок и среднему баллу
- •Выборка студентов какой-нибудь группы, имеющих средний балл выше 4
- •Подсчет числа студентов, имеющих более 2-х неудовлетворительных оценок и вывод упорядоченного списка этих студентов
- •Задание для самостоятельной работы
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 11. Работа с типизироваными файлами
- •Краткие теоретические сведения
- •Объявление файловой переменной
- •Назначение файла файловой переменной
- •Открытие файла
- •Текущая позиция файла
- •Чтение данных из файла
- •Запись данных в файл
- •Обрезка “хвоста” файла
- •Закрытие и удаление файлов
- •Перечень основных процедур и функций для работы с типизированными файлами
- •Создание проекта «Результаты аттестации»
- •Требования к проекту
- •Интерфейс пользователя для проекта
- •Определение типов данных
- •Настройка интерфейса пользователя
- •Вспомогательные процедуры для работы с файлом Процедура выбора имени файла
- •Процедура открытия файла
- •Процедура вывода файла в StringGrid
- •Процедуры работы со StringGrid1
- •Процедуры реализации пунктов меню fileMenu Добавление данных из StringGrid1 в файл
- •Поиск записи по фамилии
- •Удаление записи по фамилии
- •Сохранение файла под другим именем
- •Процедуры для работы с упорядоченными файлами Процедура сортировки файла
- •Поиск записи в отсортированном файле
- •Добавление записи в отсортированный файл
- •Удаление записи из отсортированного файла
- •Процедуры реализации пунктов меню sortMenu Реализация пункта меню «Сортировка файла по фамилиям»
- •Реализация пункта меню «Поиск студента по фамилии»
- •Реализация пункта меню «Добавление в упорядоченный файл из StringGrid1»
- •Реализация пункта меню «Удаление записи из отсортированного файла»
- •Задание для самостоятельной работы
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 12. Работа с текстовыми файлами
- •Краткие теоретические сведения
- •Объявление файловой переменной для текстового файла
- •Связывание файловой переменной с конкретным файлом
- •Открытие файла
- •Создание нового файла
- •Открытие файла для чтения
- •Открытие файла для дополнения
- •Текущая позиция файла
- •Записи данных в файл.
- •Чтение данных из файла
- •Особенности чтения чисел из текстового файла
- •Особенности чтения данных типа String
- •Особенности чтения и записи символов
- •Закрытие и удаление файлов
- •Перечень основных процедур для работы с текстовыми файлами
- •Общая схема работы с текстовым файлом
- •Примеры работы с текстовыми файлами
- •Пример ввода-вывода при решении простейшей задачи
- •Пример добавления данных из одного файла к другому
- •Пример чтение из файла в поле Memo
- •Пример ввода-вывода при работе с массивом
- •Пример ввода-вывода при работе с матрицей
- •Пример ввода-вывода при работе с записями
- •Задания для самостоятельной работы
- •Содержание отчета
- •Контрольные вопросы
- •РекомендоваНная литература
Пример сортировки массива по возрастанию методом выбора
Начинаем с первого элемента, который назовем изменяемым, потому что его значение будет изменяться.
Изменяемый элемент сравниваем по очереди с каждым из элементов массива, которые следуют за ним. Эти элементы будем называть текущими. Если значение текущего элемента оказывается меньше значения изменяемого, то значения этих элементов массива меняются местами.
Когда будут просмотрены все текущие элементы, то значение изменяемого элемента окажется меньшим из всех текущих.
Проиллюстрируем алгоритм этой сортировки рисунками. Исходное расположение элементов массива показано на рисунке 8.2.
Рисунок 8.2 – Исходная схема сортируемого массива
После обмена местами A[1] и A[2] массив будет иметь вид, показанный на рисунке 8.3.
Рисунок 8.3 – Схема сортируемого массива после первого обмена элементов
Далее будут сравниваться элементы A[3] и A[1], но так как A[3]не меньше A[1] , то A[3] остается на месте.
Анализ элемента A[4] показывает, что он меньше, чем A[1], поэтому его следует поменять местами с A[1]. Результат изменений показан на рисунке 8.4.
Рисунок 8.4 – Схема сортируемого массива после второго обмена элементов
Далее будут сравниваться элементы A[5] и A[1], но так как A[5]не меньше A[1] , то A[5] остается на месте.
На этом первый проход сортируемого массива заканчивается. В результате этого прохода в первой позиции массива оказался наименьший элемент.
Теперь необходимо осуществить второй проход по массиву, но в качестве изменяемого берется уже второй элемент массива. Со вторым элементом будут сравниваться элементы, начиная с третьего. В результате чего на второе место будет поставлен минимальный элемент среди элементов со 2-го по 5-й. Результаты второго прохода по массиву представлены на рисунке 8.5.
Рисунок 8.5 – Схема второго прохода при сортировке массива методом выбора
При третьем проходе в качестве изменяемого элемента выступает третий элемент массива, и с ним будут последовательно сравниваться элементы, начиная с четвертого. В результате третий и четвертый элементы поменяются местами.
При последнем, четвертом проходе изменяемым будет четвертый элемент, а сравниваться он будет с единственным, следующим за ним, элементом номер пять. Но в данном примере менять местами эти элементы не нужно.
Рисунок 8.6 – Схема последних проходов по массиву при сортировке методом выбора
Процедура сортировки массива методом выбора
procedure SortChoise (var a: TArray100; count: integer);
var i, j, x: integer;
begin
for i := 1 to count - 1 do
begin
for j := i + 1 to count do
if a[j] > a[i] then
begin
x := a[i];
a[i] := a[j];
a[j] := x;
end;
end;
end;
-
Сортировка обменом (метод пузырька)
Алгоритм основан на принципе сравнения и обмена пары соседних элементов.
Каждый элемент массива, начиная с первого, сравнивается со следующим, и если он больше следующего, то элементы меняются местами.
Рисунок 8.7 – Алгоритм сортировки по возрастанию методом обмена
В результате после первого прохода, при сортировке по возрастанию, наибольший элемент окажется на последнем месте.
Затем все повторяется заново и наибольший среди оставшихся элементов оказывается на предпоследнем месте.
Таким образом, элементы с меньшим значением продвигаются к началу массива (всплывают), а элементы с большим значением – к концу массива (тонут). Этот метод получил название метод пузырька, что, очевидно, если располагать массивы вертикально.
Могут быть случаи, когда значения в первоначальном массиве расположены так, что массив будет отсортирован намного раньше, чем будет сделан последний проход по массиву. Учитывая это, количество проходов в программе можно сократить, проверяя после окончания каждого очередного прохода по массиву, был ли сделан хоть один обмен значений элементов. Если обменов не было, сортировка закончена.
Схема алгоритма сортировки массива методом обмена показана на рисунке 8.7.
Сортировка реализуется с помощью двух циклов. Внешний цикл выполняется до тех пор, пока при завершении очередного прохода по массиву не окажется, что перестановок элементов делать не пришлось. В этом случае переменная ok сохранит значение true, и это будет означать, что массив отсортирован. Так как условие отсутствия перестановок элементов при проходе по массиву можно проверить только после завершения прохода, то очевидно, что в данном случае следует использовать цикл repeat ... until.
Во внутреннем цикле последовательно сравниваются соседние элементы массива, причем количество таких сравнений заранее известно. Поэтому для организации прохода по массиву используется цикл for. Максимальное значение параметра этого цикла после каждого прохода уменьшается, так как в результате каждого прохода максимальный элемент рассмотренной части массива оказывается в конце этой части, то есть занимает свое место в отсортированном массиве.