Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задачи_Делфи.docx
Скачиваний:
11
Добавлен:
14.08.2019
Размер:
1 Мб
Скачать
☆

Глава 6

Массивы и списки

6.1. Компоненты tStringGrid и tDrawGrid

6.1.1. Сортировка массива

Постановка задачи. Проект должен реализовать пошаговую визуализацию процесса сортировки числового массива лдним из методов сортировки.

Реализация. Положите на форму компонент TStringGrid со страницы Additional. Он представляет собой таблицу. Число строк и столбцов в таблице можно менять программным путем или с помощью свойств. Также можно изменить количество фиксированных ячеек таблицы (строка и столбец для заголовков) или убрать их совсем.

Так как содержимое ячеек имеет строковый тип, то при работе с числами все время придется менять тип данных, т. е. переводить строки в целые числа и обратно.

Для нашего проекта установите количество строк и столбцов по 10, уберите фиксированные строку и столбец.

Положите три кнопки: «Заполнить массив», «Сортировать массив» и «Выход».

Заполните случайными числами от 1 до 100 одну строку массива.

Для того чтобы получить доступ к содержимому ячеек, используют свойство Cells[col, row]. Первое значение col – номер столбца, row – номер строки. Строки и столбцы нумеруются, начиная с 0.

Обработчик кнопки «Заполнить массив» заполняет случайными числами нулевую строку таблицы. Остальные девять строк пока пустые.

var i:integer;

begin

randomize;

for i:=0 to 9 do

stringgrid1.cells[ i; 0]:=inttostr(random(100)+1);

end;

Теперь надо отсортировать массив по возрастанию. Для сортировки массивов можно использовать следующие методы: метод прямого выбора, метод вставок, метод обмена и другие.

Метод прямого выбора

Сначала найдем наименьший элемент в массиве и запомним его номер. Затем поменяем минимальный элемент с элементом на первом месте. Это надо реализовать так, чтобы на одно нажатие кнопки «Сортировать массив» во второй строке появились числа таким образом, чтобы минимальное число из верхней строки было бы на первом месте. Элемент, который был на первом месте, ставится на место минимального числа. Эту строку запишем в таблицу под номером 1 (счет с 0). Теперь работаем с этой строкой. Среди оставшихся элементов снова найдем наименьший и поставим его на второе место. Результат по нажатию кнопки «Сортировать массив» будет виден в третьей строке (с номером 2). Так будем продолжать до тех пор, пока массив не будет отсортирован. Результат каждого шага будем записывать в строку таблицы. В десятой строке массив должен быть упорядочен по возрастанию, но это может произойти и раньше.

Метод вставок

Каждый элемент массива сравнивается со стоящими впереди него элементами и ставится на нужное место или остается на месте, если все они его меньше.

Метод обмена

В этом методе происходит сравнение двух соседних элементов, при этом тот, который больше, ставится на второе место и сравнивается со следующим. Таким образом, после первого прохода массива наибольший элемент окажется на последнем месте, и на следующем шаге последний элемент можно не проверять.

После того как массив упорядочен, кнопка «Сортировать массив» должна стать неактивной. Для этого сделаем

Button2.Enabled := false, где Button2 – это кнопка сортировки.

На рис. 33 приведен результат работы проекта после окончания сортировки.

Рис. 33. Сортировка массива методом прямого выбора

Задание. Сделайте так, чтобы по кнопке «Заполнить массив» можно было начать сначала (все строки таблицы, кроме нулевой, надо сделать пустыми, а нулевую вновь заполнить случайными числами).