Курсовая работа: Работа с двумерными числовыми массивами
25 strNumbers.Destroy;
26 end;
2.3.3 Модуль form
Модуль, содержащий форму, переменную для хранения исходной матрицы, процедуры синхронизации содержания матрицы и элементов формы, а так же процедуру задания размеров матрицы.
Так как задача чётко разделена на задания, оперирующие одними и теми же исходными данными (целочисленным двумерным массивом), было принято решение разделить интерфейс приложения на две части. В верхней части формы отображается матрица исходных данных, которую можно редактировать и размеры которой можно менять. Нижняя часть формы представляет собой набор закладок, каждая из которых соответствует одной из поставленных задач. На каждой закладке содержится описание задания, кнопка «выполнить», а так же элементы, необходимы для отображения результата в рамках этого задания. Некоторые задания состоят в изменении исходной матрицы, результат выполнения таких заданий отображается непосредственно в исходных данных в верхней части формы. Всего существует как минимум три способа выбрать задачу: щёлкнуть мышкой по закладке, выбрать нужный пункт в меню «Задачи», нажать одну из кнопок F1 - F5.
Опишем важные процедуры формы. Процедура ReadMatrix осуществляет чтение исходных данных из таблицы на форме в двумерный массив. Перед началом чтения процедура устанавливает размер массива:
1 {заполнить матрицу в соответствии с содержанием таблицы на форме}
2 procedure TMainForm.ReadMatrix;
3 var rowN, colN: integer;
4 begin
5 SetLength(workMatrix, G_Matrix.RowCount-1, G_Matrix.ColCount-1);
6 for rowN:= 0 to G_Matrix.RowCount-2 do
7 for colN:= 0 to G_Matrix.ColCount-2 do
8 workMatrix[rowN, colN]:= StrToIntDef(G_Matrix.Cells[colN+1, rowN+1], 0);
9 end;
Процедура writeMatrix осуществляет обратную операцию, она заполняет поля таблицы в соответствии с массивом. Кроме этого она меняет значения числа строк и столбцов в соответствии с размерами массива:
1 {заполнить таблицу на форме в соответствии с содержанием матрицы}
2 procedure TMainForm.writeMatrix;
3 var rowN, colN: integer;
4 begin
5 G_Matrix.Cells[1, 1]:= '';//если матрица пуста
6 E_RowsN.Text:= IntToStr(high(workMatrix) + 1);
7 if(E_RowsN.Text <> '0') then
8 E_ColsN.Text:= IntToStr(high(workMatrix[low(workMatrix)]) + 1)
9 else E_ColsN.Text:= '0';
10 B_SetDimmsClick(self);
11 //заполним таблицу
12 for rowN:= low(workMatrix) to high(workMatrix) do
13 for colN:= low(workMatrix[rowN]) to high(workMatrix[rowN]) do
14 G_Matrix.Cells[colN+1, rowN+1]:= IntToStr(workMatrix[rowN, colN]);