Читайте также:
|
|
В этом методе происходит сравнение двух соседних элементов, при этом тот, который больше, ставится на второе место и сравнивается со следующим. Таким образом, после первого прохода массива наибольший элемент окажется на последнем месте, и на следующем шаге последний элемент можно не проверять.
После того как массив упорядочен, кнопка «Сортировать массив» должна стать неактивной. Для этого сделаем
Button2.Enabled:= false, где Button 2 – это кнопка сортировки.
На рис. 33 приведен результат работы проекта после окончания сортировки.
Рис. 33. Сортировка массива методом прямого выбора
Задание. Сделайте так, чтобы по кнопке «Заполнить массив» можно было начать сначала (все строки таблицы, кроме нулевой, надо сделать пустыми, а нулевую вновь заполнить случайными числами).
6.1.2. Проект «Таблица успеваемости»
Постановка задачи. Составьте и отсортируйте таблицу успеваемости. Эта задача – пример использования двумерного массива (ввод, сортировка, вывод) и компонента TStringGrid.
Реализация. Положите на форму компонент TStringGrid со страницы Additional. Он представляет собой таблицу. Задайте число строк, равным 14, и число столбцов, равным 6. Заполните фиксированный столбец названиями предметов, а фиксированную строку – названиями оценок. Саму таблицу заполните числом оценок по каждому предмету. Так как содержимое ячеек имеет строковый тип, то при работе с числами все время придется менять тип данных,
т. е. переводить строки в целые числа и обратно. По нажатию кнопки «Итоги» считается средний балл, а затем таблица сортируется
по столбцу «Средний балл». Результат работы приложения приведен на рис. 34.
Рис. 34. Проект «Таблица успеваемости»
В обработчике TForm1.FormActivate(Sender: TObject) происходит активация формы. В его коде зададим начальные данные, т. е. заполним названия колонок и строк. В приведенном коде имя компонента StringGrid 1 заменено на tab l.
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;
Дата добавления: 2015-08-20; просмотров: 39 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Сортировка массива | | | Система предварительной продажи билетов |