2011-2012 учебный год
К сегодняшнему занятию Вами изучены следующие элементы управления
Edit
Label
Button
RadioButton
CheckBox
SpinEdit (на вкладке Misc)
FloatSpinEdit (на вкладке Misc)
ListBox (на вкладке Standard)
Memo (на вкладке Standard)
GroupRadioButton (на вкладке Standard)
ShowMessage, MessageBox
StringGrid (на вкладке Additional)
Компонент TStringGrid - на вкладке компонентов Additional.
Настройка таблицы StringGrid1
в окне Инспектор объектов
Убрать заголовки строк
FixedCols = 0
Убрать заголовки колонок
FixedRows = 0
Установить количество колонок
ColCount = 5
Установить количество строк
RowCount = 1
Установить ширину всех колонок
DefaultColWidth = 30
Установить высоту всех строк
DefaultRowHeight = 30
Разрешить редактирование ячеек
Options/goEditing = True
Об отметках
Основные упражнения не отмечены никакими специальными знаками, их выполнения достаточно для удовлетворительной оценки. Дополнительные упражнения отмечены "звездочками", их выполнение необходимо для получения повышенной оценки.
"5" - в отчете выполнены все основные упражнения, дополнительно выполнены упражнения с одной и двумя "звездочками".
"4" - в отчете выполнены все основные упражнения, дополнительно выполнены упражнения с одной "звездочкой".
"3" - в отчете выполнены все основные упражнения.
Упражнения
Поиск 1. Найти заданный элемент в двумерном массиве или вывести сообщение о том, что такого элемента нет.
Требования к выполнению. Использовать целые случайные числа.
Пример интерфейса
Пример программы
// Глобальные константы.
const
FIRST_COL = 0;
BRUSH_COLOR = clLime;
SHIFT_TEXT_X = 3;
SHIFT_TEXT_Y = 3;
NOT_FOUND = 'Не обнаружено';
procedure TForm1.Button1Click(Sender: TObject);
var
col, row : Byte;
a, b : Integer;
begin
a := SpinEdit1.Value;
b := SpinEdit2.Value;
for col := 1 to StringGrid1.ColCount - 1 do begin
for row := 1 to StringGrid1.RowCount - 1 do begin
StringGrid1.Cells[col, row]:=IntToStr(Random(b - a + 1) + a);
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
col, row : Byte;
s : Integer;
is_found : Boolean;
rect : TRect;
ts : string;
begin
s := SpinEdit3.Value;
is_found := False;
for col := 1 to StringGrid1.ColCount - 1 do begin
for row := 1 to StringGrid1.RowCount - 1 do begin
if s = StrToInt(StringGrid1.Cells[col, row]) then begin
ts := StringGrid1.Cells[col, row];
is_found := True;
rect := StringGrid1.CellRect(col, row);
StringGrid1.Canvas.Brush.Color := BRUSH_COLOR;
StringGrid1.Canvas.FillRect(rect);
// StringGrid1.Cells[col, row] := ts;
StringGrid1.Canvas.TextOut(rect.Left+SHIFT_TEXT_X, rect.Top+SHIFT_TEXT_Y, ts);
end;
end;
end;
if not(is_found) then
Application.MessageBox(PChar(NOT_FOUND+': '+IntToStr(s)), PChar(NOT_FOUND), 0);
end;
procedure TForm1.FormShow(Sender: TObject);
var
col, row : Byte;
a, b : Integer;
begin
StringGrid1.Canvas.Pen.Color := BRUSH_COLOR;
a := SpinEdit1.Value;
b := SpinEdit2.Value;
for col := 1 to StringGrid1.ColCount - 1 do begin
for row := 1 to StringGrid1.RowCount - 1 do begin
StringGrid1.Cells[col, row]:=IntToStr(Random(b - a + 1) + a);
StringGrid1.Cells[FIRST_COL, row]:=IntToStr(row);
end;
end;
end;
Поиск 2. Найти в двумерном массиве все элементы, которые входят в заданный отрезок.
Требования к выполнению. Использовать целые случайные числа.
Пример интерфейса
Пример программы
var Form1: TForm1; // Глобальные константы. const FIRST_COL = 0; BRUSH_COLOR = clLime; SHIFT_TEXT_X = 3; SHIFT_TEXT_Y = 3; NOT_FOUND = 'Не обнаружено'; procedure TForm1.Button1Click(Sender: TObject); var col, row : Byte; a, b : Integer; begin a := SpinEdit1.Value; b := SpinEdit2.Value; for col := 1 to StringGrid1.ColCount - 1 do begin for row := 1 to StringGrid1.RowCount - 1 do begin StringGrid1.Cells[col, row]:=IntToStr(Random(b - a + 1) + a); end; end; end; procedure TForm1.Button2Click(Sender: TObject); var col, row : Byte; is_found : Boolean; rect : TRect; ts : string; c, d, x : Integer; begin c := SpinEdit3.Value; d := SpinEdit4.Value; is_found := False; for col := 1 to StringGrid1.ColCount - 1 do begin for row := 1 to StringGrid1.RowCount - 1 do begin x := StrToInt(StringGrid1.Cells[col, row]); if (x > c) and (x < d) then begin ts := StringGrid1.Cells[col, row]; is_found := True; rect := StringGrid1.CellRect(col, row); StringGrid1.Canvas.Brush.Color := BRUSH_COLOR; StringGrid1.Canvas.FillRect(rect); // StringGrid1.Cells[i,j] := ts; StringGrid1.Canvas.TextOut(rect.Left+SHIFT_TEXT_X, rect.Top+SHIFT_TEXT_Y, ts); end; end; end; if not(is_found) then Application.MessageBox(PChar(NOT_FOUND + ': [' + IntToStr(c) + '; ' + IntToStr(d) + ']'), PChar(NOT_FOUND), 0); end; procedure TForm1.FormShow(Sender: TObject); var col, row : Byte; a, b : Integer; begin StringGrid1.Canvas.Pen.Color := BRUSH_COLOR; a := SpinEdit1.Value; b := SpinEdit2.Value; for col := 1 to StringGrid1.ColCount - 1 do begin for row := 1 to StringGrid1.RowCount - 1 do begin StringGrid1.Cells[col, row]:=IntToStr(Random(b - a + 1) + a); StringGrid1.Cells[FIRST_COL, row]:=IntToStr(row); end; end; end;
Поиск 3. Найти строку с максимальной суммой.
Требования к выполнению. Использовать целые и случайные числа.
Пример интерфейса
Пример программы
var Form1: TForm1; // Глобальные константы. const MAX_COLS = 5; MAX_ROWS = 8; INDEX_COLS = 0; SUM_COL = 6; BRUSH_COLOR = clLime; SHIFT_TEXT_X = 3; SHIFT_TEXT_Y = 3; NOT_FOUND = 'Не обнаружено'; procedure TForm1.Button1Click(Sender: TObject); var col, row : Byte; a, b : Integer; begin a := SpinEdit1.Value; b := SpinEdit2.Value; for col := 1 to MAX_COLS do begin for row := 1 to MAX_ROWS do begin StringGrid1.Cells[col, row]:=IntToStr(Random(b - a + 1) + a); StringGrid1.Cells[SUM_COL, row] := ''; end; end; end; procedure TForm1.Button2Click(Sender: TObject); var col, row, row_max : Byte; max_s, t : Integer; rect : TRect; ts : string; begin // s := SpinEdit3.Value; row_max := 1; max_s := StrToInt(StringGrid1.Cells[SUM_COL, row_max]); for row := 1 to MAX_ROWS do begin t := StrToInt(StringGrid1.Cells[SUM_COL, row]); if max_s < t then begin max_s := t; row_max := row; end; end; for col := 1 to MAX_COLS do begin ts := StringGrid1.Cells[col, row_max]; rect := StringGrid1.CellRect(col, row_max); StringGrid1.Canvas.Brush.Color := BRUSH_COLOR; StringGrid1.Canvas.FillRect(rect); // StringGrid1.Cells[col, row] := ts; StringGrid1.Canvas.TextOut(rect.Left+SHIFT_TEXT_X, rect.Top+SHIFT_TEXT_Y, ts); end; end; procedure TForm1.Button3Click(Sender: TObject); var col, row : Byte; s : Integer; begin for row := 1 to MAX_ROWS do begin s := 0; for col := 1 to MAX_COLS do begin s := s + StrToInt(StringGrid1.Cells[col, row]); end; StringGrid1.Cells[SUM_COL, row] := IntToStr(s); end; end; procedure TForm1.FormShow(Sender: TObject); var col, row : Byte; a, b : Integer; begin StringGrid1.Canvas.Pen.Color := BRUSH_COLOR; a := SpinEdit1.Value; b := SpinEdit2.Value; for col := 1 to MAX_COLS do begin for row := 1 to MAX_ROWS do begin StringGrid1.Cells[col, row]:=IntToStr(Random(b - a + 1) + a); StringGrid1.Cells[INDEX_COLS, row]:=IntToStr(row); end; end; end;
* Поиск 4. Найти строку с минимальным элементом и столбец с максимальным элементом.
Требования к выполнению. Использовать целые и случайные числа.
** Поиск 5. Вычислить длину отрезка, на котором расположены все элементы матрицы. Найденный отрезок разбить на 5 равных отрезков. Окрасить клетки матрицы в цвета красный, желтый, зеленй, синий, фиолетовый соответсвенно для элементов, которые принадлежат 5-му, 4-му, 3-му, 2-му и 1-му отрезкам.
Требования к выполнению. Использовать целые и случайные числа.
Пример интерфейса
Домашнее задание
Стоунхендж. Найти все столбцы сумма которых превышает заданное число.
Требования к выполнению. Исходный массив следует заполнить целыми случайными числами и вывести в StringGrid1, а отсортированный массив - в StringGrid2.