
- •Оглавление
- •Введение
- •Глава 1
- •Использование компонентов общего назначения: tLabel, tButton, tEdit, tShape, tTimer, tPanel
- •1.1.1. Проект «Калькулятор»
- •1.1.2. Проект «Таймер»
- •1.1.3. Проект «Светофор»
- •1.1.4. Проект «Движение шарика tShape с отражением»
- •Глава 2
- •2.1. Класс tCanvas, его свойства и методы
- •2.1.1. Рисование узоров
- •2.1.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.1.2. Проект «Таблица успеваемости»
Постановка задачи. Составьте и отсортируйте таблицу успеваемости. Эта задача – пример использования двумерного массива (ввод, сортировка, вывод) и компонента TStringGrid.
Реализация. Положите на форму компонент TStringGrid со страницы Additional. Он представляет собой таблицу. Задайте число строк, равным 14, и число столбцов, равным 6. Заполните фиксированный столбец названиями предметов, а фиксированную строку – названиями оценок. Саму таблицу заполните числом оценок по каждому предмету. Так как содержимое ячеек имеет строковый тип, то при работе с числами все время придется менять тип данных, т. е. переводить строки в целые числа и обратно. По нажатию кнопки «Итоги» считается средний балл, а затем таблица сортируется по столбцу «Средний балл». Результат работы приложения приведен на рис. 34.
Рис. 34. Проект «Таблица успеваемости»
В обработчике TForm1.FormActivate(Sender: TObject) происходит активация формы. В его коде зададим начальные данные, т. е. заполним названия колонок и строк. В приведенном коде имя компонента StringGrid1 заменено на tabl.
procedure TForm1.FormActivate(Sender: TObject);
begin
// Заполняем изначально название колонок и строк
tabl.Cells[0,0]:='Предмет';
tabl.Cells[1,0]:='Удов. "3"';
tabl.Cells[2,0]:='Хорошо "4"';
tabl.Cells[3,0]:='Отлично "5"';
tabl.Cells[4,0]:='Кол-во оценок';
tabl.Cells[5,0]:='Средн. балл';
tabl.Cells[0,1]:='Биология';
tabl.Cells[0,2]:='Русский язык';
tabl.Cells[0,3]:='Литература';
tabl.Cells[0,4]:='Геометрия';
tabl.Cells[0,5]:='Алгебра';
tabl.Cells[0,6]:='Физ.культура';
tabl.Cells[0,7]:='Черчение';
tabl.Cells[0,8]:='География';
tabl.Cells[0,9]:='Англ. язык';
tabl.Cells[0,10]:='Немец. язык';
tabl.Cells[0,11]:='Информатика';
tabl.Cells[0,12]:='ОБЖ';
tabl.Cells[0,13]:='Физика';
end;
Ниже дан код обработчика события OnClick кнопки «Итоги»:
procedure TForm1.Button1Click(Sender: TObject);
var
c,r:integer; // Номер колонки и строки таблицы
s:integer; // Всего оценок по предмету
p:integer; // Средний балл по предмету
m:integer; // Номер строки с максимальным количеством очков
buf:array[0..5] of string; // Буфер для обмена строк
i:integer;
begin
for r:=1 to tabl.rowcount do // Обработать все строки
begin
s:=0;
// Вычисляем число оценок
for c:=1 to 3 do
if tabl.cells[c,r] <> '' // Если ячейка не пустая
then s:=s+StrToInt(tabl.cells[c,r]) // Накапливаем сумму
else tabl.cells[c,r]:='0'; // Иначе присваиваем ноль
// Вычисляем сумму баллов
p:=3*StrToInt(tabl.cells[1,r])+ 4*StrToInt(tabl.cells[2,r])+
5*StrToInt(tabl.cells[3,r]);
// Вывод результата
tabl.cells[4,r]:=IntToStr(s); // Всего оценок
if s<>0 then
tabl.cells[5,r]:=IntToStr(round(p/s)) // Средний балл
else
tabl.cells[5,r]:='0';
end;
{ Сортировка таблицы по убыванию по содержимому 5-го столбца методом выбора }
for r:=1 to tabl.rowcount-1 do
begin
m:=r; // Максимальный элемент - в r-й строке
for i:=r to tabl.rowcount-1 do
if StrToInt(tabl.cells[5,i])>StrToInt(tabl.cells[5,m])
then m:=i;
if r <> m then
begin // Обменяем r-ю и m-ю строки таблицы
for c:=0 to 5 do
begin
buf[c]:=tabl.Cells[c,r];
tabl.Cells[c,r]:=tabl.Cells[c,m];
tabl.Cells[c,m]:=buf[c];
end;
end;
end;
end;