- •Оглавление
- •Введение
- •Глава 1
- •Использование компонентов общего назначения: tLabel, tButton, tEdit, tShape, tTimer, tPanel
- •1.1.1. Проект «Калькулятор»
- •1.1.2. Проект «Таймер»
- •1.1.3. Проект «Светофор»
- •1.1.4. Проект «Движение шарика tShape с отражением»
- •2.1. Класс tCanvas, его свойства и методы
- •2.1.1. Рисование узоров
- •2.1.2. Рисование поля для различных игр
- •Глава 2
- •2.1.3. Рисование координатной сетки
- •2.1.4. Построение графиков элементарных функций
- •2.2. Класс tBitmap и работа с растровыми рисунками
- •2.2.1. Рисование на поле растрового рисунка
- •2.2.2. Движение двоичного образа по фоновой картинке
- •2.3. Компонент tImage и его использование
- •2.3.1. Проект «Движение компонента tImage»
- •2.3.2. Перемещение картинок
- •2.3.3. Проект «Движение компонента tImage
- •Глава 3
- •3.1. События от мыши
- •3.1.1. Проект «Попади в мишень»
- •3.1.2. Проект «Снежинки»
- •3.1.3. Проект «Крестики-нолики»
- •3.1.4. Движение образа по удерживанию левой кнопки мыши
- •3.1.5. Проект «Жизнь клеток»
- •3.2. События от клавиатуры
- •3.2.1. Код клавиши
- •3.2.2. Управляемое движение образа
- •3.2.3. Совмещение управляемого и неуправляемого движений.
- •Глава 4
- •4.1. Проект «Простейший графический редактор»
- •Глава 5
- •5.1. Создание кнопок
- •5.1.1. Проект «Лохотрон»
- •5.1.2. Игра «Пятнадцать»
- •5.2. Создание компонентов tImage
- •5.2.1. Проект «Угадай картинку»
- •5.2.2. Проект «Собери картинку»
- •Глава 6
- •6.1. Компоненты tStringGrid и tDrawGrid
- •6.1.1. Сортировка массива
- •6.1.2. Проект «Таблица успеваемости»
- •6.1.3. Система предварительной продажи билетов
- •6.1.4. Проект «Таблица рисунков»
- •6.1.5. Рисование в таблице tDrawGrid
- •6.2. Компоненты tListBox, tCombobox ,
- •6.2.1. Прорисовка изображений в списке tListBox
- •6.2.2. Проект «Зоомагазин»
- •6.2.3. Проект «Шуточная игра»
- •6.2.4. Проект «Редактирование списка вопросов»
- •Глава 7
- •7.1. Тест «Знаете ли вы загадки?»
- •7.2. Проект «Исторические даты»
- •Глава 8
- •8.1. Компоненты tOpenDialog, tSaveDialog – диалоги
- •8.1.1. Просмотр текстовых файлов
- •8.2. Добавление и удаление записей в файл и из файла
- •8.2.1. Проект «Журнал группы»
- •8.3. Файлы для проекта «Судоку»
- •Глава 9
- •9.1. Просмотр видеофильма с использованием
- •9.2. Простейшая мультипликация
- •Глава 10
- •10.1. Пример использования try… except
- •Глава 11
- •11.1. Оформление проекта
- •11.1.1. Проект «Бегущая строка»
- •11.1.2. Проект «Титры»
- •11.1.3. Общие рекомендации по оформлению
- •11.2. Рекомендации для отчета по проекту
- •11.3. Темы проектов
- •11.3.1. Головоломка «Сквэрворд»
- •11.3.2. Задача «Путешествие по маршруту»
- •11.3.3. Головоломка «Ходом коня»
- •11.3.4. Задача «Извилистый путь»
- •11.3.5. Головоломка «Фишки на поле»
- •Список литературы
- •630058, Новосибирск, ул. Русская, 35
Глава 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. Сортировка массива методом прямого выбора
Задание. Сделайте так, чтобы по кнопке «Заполнить массив» можно было начать сначала (все строки таблицы, кроме нулевой, надо сделать пустыми, а нулевую вновь заполнить случайными числами).
