Приложение 2. Полный листинг формы (файл form . pas )
14 { 15 Модуль, содержащий форму, переменную для хранения исходной матрицы, 16 процедуры синхронизации содержания матрицы и элементов формы, а так же 17 процедуру задания размеров матрицы 18 } 19 unit form; 20 21 interface 22 23 uses 24 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 25 Dialogs, Menus, StdCtrls, ExtCtrls, ComCtrls, Grids, 26 //модули программы 27 fileIO, MatrixOperations; 28 29 type 30 TMainForm = class(TForm) 31 Pages: TPageControl; 32 Task1: TTabSheet; 33 Task2: TTabSheet; 34 Task3: TTabSheet; 35 Task4: TTabSheet; 36 Task5: TTabSheet; 37 Menu: TMainMenu; 38 A1: TMenuItem; 39 load: TMenuItem; 40 save: TMenuItem; 41 N1: TMenuItem; 42 quit: TMenuItem; 43 N4: TMenuItem; 44 M_Task1: TMenuItem; 45 M_Task2: TMenuItem; 46 M_Task3: TMenuItem; 47 M_Task4: TMenuItem; 48 M_Task5: TMenuItem; 49 GroupBox1: TGroupBox; 50 G_Matrix: TStringGrid; 51 E_RowsN: TEdit; 52 Label1: TLabel; 53 Label2: TLabel; 54 E_ColsN: TEdit; 55 B_SetDimms: TButton; 56 SaveDialog: TSaveDialog; 57 OpenDialog: TOpenDialog; 58 Label3: TLabel; 59 Label4: TLabel; 60 G_Task1B: TStringGrid; 61 Label5: TLabel; 62 Label6: TLabel; 63 G_Task1C: TStringGrid; 64 B_Task1Run: TButton; 65 Label7: TLabel; 66 Label8: TLabel; 67 Label9: TLabel; 68 E_Task2S1: TEdit; 69 B_Task2Run: TButton; 70 E_Task2S2: TEdit; 71 L_Task2MatrxChanged: TLabel; 72 Label10: TLabel; 73 B_Task3Run: TButton; 74 L_Task3Result: TLabel; 75 Label11: TLabel; 76 B_Task4Run: TButton; 77 Label12: TLabel; 78 B_Task5Run: TButton; 79 about: TMenuItem; 80 MEM_Task4: TMemo; 81 procedure saveClick(Sender: TObject); 82 procedure loadClick(Sender: TObject); 83 procedure B_SetDimmsClick(Sender: TObject); 84 procedure FormCreate(Sender: TObject); 85 procedure quitClick(Sender: TObject); 86 procedure M_Task1Click(Sender: TObject); 87 procedure M_Task2Click(Sender: TObject); 88 procedure M_Task3Click(Sender: TObject); 89 procedure M_Task4Click(Sender: TObject); 90 procedure M_Task5Click(Sender: TObject); 91 procedure B_Task1RunClick(Sender: TObject); 92 procedure FormDestroy(Sender: TObject); 93 procedure B_Task2RunClick(Sender: TObject); 94 procedure B_Task3RunClick(Sender: TObject); 95 procedure B_Task4RunClick(Sender: TObject); 96 procedure B_Task5RunClick(Sender: TObject); 97 procedure aboutClick(Sender: TObject); 98 private 99 procedure readMatrix; 100 procedure writeMatrix; 101 public 102 published 103 { Public declarations } 104 end; 105 106 var 107 MainForm: TMainForm; 108 workMatrix: TMatrix; 109 110 implementation 111 112 uses Math; 113 114 {$R *.dfm} 115 116 {заполнить матрицу в соответствии с содержанием таблицы на форме} 117 procedure TMainForm.ReadMatrix; 118 var rowN, colN: integer; 119 begin 120 SetLength(workMatrix, G_Matrix.RowCount-1, G_Matrix.ColCount-1); 121 for rowN:= 0 to G_Matrix.RowCount-2 do 122 for colN:= 0 to G_Matrix.ColCount-2 do 123 workMatrix[rowN, colN]:= StrToIntDef(G_Matrix.Cells[colN+1, rowN+1], 0); 124 end; 125 126 {заполнить таблицу на форме в соответствии с содержанием матрицы} 127 procedure TMainForm.writeMatrix; 128 var rowN, colN: integer; 129 begin 130 G_Matrix.Cells[1, 1]:= '';//если матрица пуста 131 //обновим размеры матрицы 132 E_RowsN.Text:= IntToStr(high(workMatrix) + 1); 133 if(E_RowsN.Text <> '0') then 134 E_ColsN.Text:= IntToStr(high(workMatrix[low(workMatrix)]) + 1) 135 else E_ColsN.Text:= '0'; 136 B_SetDimmsClick(self); 137 //заполним таблицу 138 for rowN:= low(workMatrix) to high(workMatrix) do 139 for colN:= low(workMatrix[rowN]) to high(workMatrix[rowN]) do 140 G_Matrix.Cells[colN+1, rowN+1]:= IntToStr(workMatrix[rowN, colN]); 141 end; 142 143 {обработчик Файл->Сохранить} 144 procedure TMainForm.saveClick(Sender: TObject); 145 var 146 outFile: TextFile; 147 begin 148 //отобразим диалог выбора файла для сохранения, если отмена - выходим 149 if SaveDialog.Execute = false then exit; 150 AssignFile(outFile, SaveDialog.Files[0]); 151 ReWrite(outFile);//создадим файл 152 153 readMatrix;//прочтём матрицу из таблицы 154 Write2DArray(workMatrix, outFile);//запишем матрицу в файл 155 156 CloseFile(outFile);//закроем файл 157 158 end; 159 160 {обработчик Файл->Загрузить} 161 procedure TMainForm.loadClick(Sender: TObject); 162 var 163 inFile: TextFile; 164 begin 165 //отобразим диалог выбора фала для загрузки, если отмена - выходим 166 if OpenDialog.Execute = false then exit; 167 AssignFile(inFile, OpenDialog.Files[0]); 168 Reset(inFile);//подготовим файл к чтению 169 170 Read2DArray(workMatrix, inFile);//прочтём матрицу из файла 171 writeMatrix;//отобразим матрицу 172 173 CloseFile(inFile);//закроем файл 174 end; 175 176 {обраюотчик уствновки размеров матрицы} 177 procedure TMainForm.B_SetDimmsClick(Sender: TObject); 178 var 179 i: integer; 180 RowsN, ColsN: integer; 181 begin 182 //значения размеров не должны быть меньше 1 183 RowsN:= StrToIntDef(E_RowsN.Text, 0); 184 if RowsN < 1 then begin RowsN:= 1; E_RowsN.Text:= '1' end; 185 ColsN:= StrToIntDef(E_ColsN.Text, 0); 186 if ColsN < 1 then begin ColsN:= 1; E_ColsN.Text:= '1' end; 187 //число строк и столбцов в таблице, учитывая колонку и строку с номерами 188 G_Matrix.RowCount:= RowsN + 1; 189 G_Matrix.ColCount:= ColsN + 1; 190 //в этих таблицах отображаются одномерные массивы из первого задания 191 G_Task1B.RowCount:= RowsN; 192 G_Task1C.RowCount:= RowsN; 193 //одномерный массив из четвёртого задания имеет длину, равную числу элементов исходной матрицы 194 //G_Task4.ColCount:= RowsN * ColsN; 195 //расставим номера строк и столбцов 196 for i:= 0 to RowsN do 197 begin 198 G_Matrix.Cells[0, i+1]:= IntToStr(i+1); 199 G_Task1B.Cells[0, i]:= IntToStr(i+1); 200 G_Task1C.Cells[0, i]:= IntToStr(i+1); 201 end; 202 for i:= 0 to ColsN do 203 G_Matrix.Cells[i+1, 0]:= IntToStr(i+1); 204 205 //for i:= 0 to RowsN * ColsN do 206 // G_Task4.Cells[i, 0]:= IntToStr(i+1); 207 G_Matrix.Refresh; 208 end; 209 210 {при создании формы задаём размер матрицы по умолчанию} 211 procedure TMainForm.FormCreate(Sender: TObject); 212 begin 213 B_SetDimmsClick(Sender); 214 end; 215 216 {при уничтожении формы освобождаем память, выделенную для хранения матрицы} 217 procedure TMainForm.FormDestroy(Sender: TObject); 218 begin 219 workMatrix:= nil; 220 end; 221 222 {обработчик Файл->Выход} 223 procedure TMainForm.quitClick(Sender: TObject); 224 begin 225 if mrYes = MessageDlg('Вы уверены, что хотите выйти?', mtConfirmation, [mbYes, mbNo], 0) 226 then Close; 227 end; 228 229 {обработчик Задачи->задача 1} 230 procedure TMainForm.M_Task1Click(Sender: TObject); 231 begin 232 Pages.ActivePageIndex:= 0; 233 end; 234 {обработчик Задачи->задача 2} 235 procedure TMainForm.M_Task2Click(Sender: TObject); 236 begin 237 Pages.ActivePageIndex:= 1; 238 end; 239 {обработчик Задачи->задача 3} 240 procedure TMainForm.M_Task3Click(Sender: TObject); 241 begin 242 Pages.ActivePageIndex:= 2; 243 end; 244 {обработчик Задачи->задача 4} 245 procedure TMainForm.M_Task4Click(Sender: TObject); 246 begin 247 Pages.ActivePageIndex:= 3; 248 end; 249 {обработчик Задачи->задача 5} 250 procedure TMainForm.M_Task5Click(Sender: TObject); 251 begin 252 Pages.ActivePageIndex:= 4; 253 end; 254 255 {выполнение первого задания} 256 procedure TMainForm.B_Task1RunClick(Sender: TObject); 257 var 258 maxVal: TVector; //массив максимальных элементов из каждой строки 259 maxValCol: TVector; //массив номеров столбцов с максимальными элементами 260 RowN: integer; 261 begin 262 readMatrix;//прочитаем матрицу из таблицы 263 GetMaxVals(maxVal, maxValCol, workMatrix);//сформируем массивы по заданию 264 for RowN:= low(maxVal) to high(maxVal) do 265 begin//выведем сформированные массивы в элементы формы 266 G_Task1B.Cells[1, RowN]:= IntToStr(maxVal[RowN]); 267 G_Task1C.Cells[1, RowN]:= IntToStr(maxValCol[RowN]+1); 268 end; 269 //освободим память 270 maxVal:= nil; 271 maxValCol:= nil; 272 end; 273 274 {выполнение второго задания} 275 procedure TMainForm.B_Task2RunClick(Sender: TObject); 276 var S1, S2: Int64;//суммы выше и ниже пересечения диагоналей 277 begin 278 readMatrix;//проситаем матрицу из таблицы 279 //высчитаем суммы 280 S1:= GetSumAbove(workMatrix); 281 S2:= GetSumBelow(workMatrix); 282 //выведем суммы в элементы формы 283 E_Task2S1.Text:= IntToStr(S1); 284 E_Task2S2.Text:= IntToStr(S2); 285 if S1 >= S2 then L_Task2MatrxChanged.Caption:= 'Матрица не была изменена' 286 else 287 begin//если S1 < S2, то 288 SwapAboveBelow(workMatrix);//меняем местами элементы выше и ниже пересечения диагоналей 289 writeMatrix;//выводим изменённую матрицу на форму 290 L_Task2MatrxChanged.Caption:= 'Матрица была изменена' 291 end; 292 end; 293 294 {выполнение третьего задания} 295 procedure TMainForm.B_Task3RunClick(Sender: TObject); 296 begin 297 readMatrix;//прочтём матрицу из таблицы 298 if (high(workMatrix)+1) mod 2 = 0 then 299 begin//если число строк - чётное 300 CircuarShift(workMatrix, true);//осуществим циклический сдвиг вверх 301 L_Task3Result.Caption:= 'был произведён сдвиг "вверх"'; 302 end 303 else 304 begin//иначе, если число строк - нечётное 305 CircuarShift(workMatrix, false);//осуществим циклический сдвиг вниз 306 L_Task3Result.Caption:= 'был произведён сдвиг "вниз"'; 307 end; 308 writeMatrix;//выведем изменённую матрицу в таблицу 309 end; 310 311 {выполнение четвёртого задания} 312 procedure TMainForm.B_Task4RunClick(Sender: TObject); 313 var arrayB: TVector;//массив, содержащий "развёрнутую" матрицу 314 var i: integer; 315 begin 316 readMatrix;//прочтём матрицу из таблицы 317 UnwindMatrix(workMatrix, arrayB);//наполним массив, обходя матрицу по спирали 318 MEM_Task4.Lines[0]:= ''; 319 for i:= 0 to high(arrayB) do 320 begin//выведем все элементы из массива на форму 321 //G_Task4.Cells[i, 1]:= IntToStr(arrayB[i]); 322 MEM_Task4.Lines[0]:= MEM_Task4.Lines[0] + IntToStr(arrayB[i]) + '; ' 323 end; 324 arrayB:= nil;//освободим память 325 end; 326 327 {выполнение пятого задания} 328 procedure TMainForm.B_Task5RunClick(Sender: TObject); 329 begin 330 readMatrix;//прочтём матрицу из таблицы 331 SortRows(workMatrix);//отсортируем строки матрицы по убыванию сумм 332 writeMatrix;//выведем матрицу в таблицу 333 end; 334 {обработчик About} 335 procedure TMainForm.aboutClick(Sender: TObject); 336 var info: string; 337 begin 338 info:= 'Курсовая работа по дисциплине "Программирование на ЯВУ"'#10#10 + 339 'Тема: "Работа с двумерными числовыми массивами"'#10 + 340 'Выполнил: студент группы ВСМ-06-08 Филон Д. В.'#10#10#10 + 341 #9#9#9#9#9#9'Москва 2010 год'; 342 MessageDlg(info, mtInformation, [mbIgnore], 0); 343 end; 344 end.
Популярное: Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (187)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |