на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Работа с двумерными числовыми массивами
p align="left">S1 = 123

S2 = 1111111130

S1 < S2, матрица была изменена:

0 0 1111111111

456 0 19

1234567890 0 789

0 15 0

0 0 -13

915 -376 0

0 123 0

Результат выполнения третьего задания:

Число столбцов нечётно - был произведён сдвиг «вниз»

0 0 1111111111

0 123 0

456 0 0

1234567890 0 789

0 15 0

0 0 -13

915 -376 19

Результат выполнения четвёртого задания:

Матрица, «развёрнутая» против часовой стрелки: 0; 456; 1234567890; 0; 0; 915; 0; 0; 1111111111; 19; -13; 0; 789; 0; 0; 123; 0; 0; 15; 0; -376

Результат выполнения пятого задания:

Строки отсортированы в невозрастающем порядке сумм:

1234567890 0 789

0 0 1111111111

915 -376 19

456 0 0

0 123 0

0 15 0

0 0 -13

Приложение 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.

Страницы: 1, 2, 3, 4, 5



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.