Тест 1: Квадратная матрица 5 x 5.
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Исходная матрица:

 

-100        -50           -20          0            20

50           100      200        1000      2000

4000       10000       20000    40000   80000

100000  -100000  -40000  -10000  -4000

-1000  -200        -20            2            12

 

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

Максимальные элементы по строкам: 20; 2000; 80000; 100000; 12

Столбцы с максимальными элементами: 5; 5; 5; 1; 5

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

S1 = 130

S2 = -40218

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

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

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

 

-1000      -200     -20         2   12

-100             -50       -20         0   20

50           100            200       1000   2000

4000           10000   20000 40000 80000

100000  -100000     -40000   -10000 -4000

 

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

Матрица, «развёрнутая» против часовой стрелки: -100; 50; 4000; 100000; -1000; -200; -20; 2; 12; -4000; 80000; 2000; 20; 0; -20; -50; 100; 10000; -100000; -40000; -10000; 40000; 1000; 200; 20000

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

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

 

4000          10000        20000         40000 80000

50         100       200        1000  2000

-100          -50            -20                0       20

-1000         -200    -20           2            12

100000    -100000    -40000         -10000    -4000

 

Тест 2: прямоугольная матрица 3 x 8.

Исходная матрица:

 

1 - 18    17 -16  15    -14             13           -12

-2    19  20  2000  200000  20000000  2000000000  11

3  -4  5  -6       7           -8           9                   -10

 

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

Максимальные элементы по строкам: 17; 2000000000; 9

Столбцы с максимальными элементами: 3; 7; 7

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

S1 = -18 S2 = -4

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

 

1    -4  17  -16    15         -14             13           -12

-2  19  20  2000  200000  20000000  2000000000  11

3 -18  5  -6        7           -8                9              -10


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

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

 

-2  19  20   2000   200000  20000000   2000000000  11

3  -18  5     -6   7           -8                9                    -10

1    -4   17   -16  15         -14              13             -12

 

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

Матрица, «развёрнутая» против часовой стрелки: 1; -2; 3; -4; 5; -6; 7; -8; 9; -10; 11; -12; 13; -14; 15; -16; 17; -18; 19; 20; 2000; 200000; 20000000; 2000000000;

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

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

 

-2  19  20  2000  200000  20000000 2000000000  11

3   -4   5    -6  7      -8                9               -10

1  -18  17 -16     15    -14         13             -12

 


Тест 3: прямоугольная матрица 10 x 5, наполненная случайными числами.

Исходная матрица:

 

4490     6540 -12901 20330  -6046

-27459 -22256 26705 14852 -30502

23701 -11502 -30162 -14325 -20739

-15721 -14704 17504 -23934 21020

-27932 7054 -30557 -28698 -19302

-16794 -24715 28069 -2485 -11281

30727 18102 20673 -32373 23140

-16762 -1303 5821 21065 -25295

-24472 27091 -6385 -13002 -22009

-12309 26284 20788 -21316 -25044

 

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

Максимальные элементы по строкам: 20330; 26705; 23701; 21020; 7054

Столбцы с максимальными элементами: 4; 3; 1; 5; 2

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

S1 = 4934

S2 = -21774

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

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

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

 

-12309 26284 20788 -21316 -25044

4490    6540  -12901  20330  -6046

-27459 -22256 26705 14852 -30502

23701 -11502 -30162 -14325 -20739

-15721 -14704 17504 -23934 21020

-27932 7054 -30557 -28698 -19302

-16794 -24715 28069 -2485 -11281

30727 18102 20673 -32373 23140

-16762 -1303 5821 21065 -25295

-24472 27091 -6385 -13002 -22009

 

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

Матрица, «развёрнутая» против часовой стрелки: 4490; -27459; 23701; -15721; -27932; -16794; 30727; -16762; -24472; -12309; 26284; 20788; -21316; -25044; -22009; -25295; 23140; -11281; -19302; 21020; -20739; -30502; -6046; 20330; -12901; 6540; -22256; -11502; -14704; 7054; -24715; 18102; -1303; 27091; -6385; -13002; 21065; -32373; -2485; -28698; -23934; -14325; 14852; 26705; -30162; 17504; -30557; 28069; 20673; 5821

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

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

 

30727 18102 20673 -32373 23140

4490 6540 -12901 20330    -6046

-12309 26284 20788 -21316 -25044

-15721 -14704 17504 -23934 21020

-16762 -1303 5821 21065  -25295

-16794 -24715 28069 -2485 -11281

-27459 -22256 26705 14852 -30502

-24472 27091 -6385 -13002 -22009

23701 -11502 -30162 -14325 -20739

-27932 7054 -30557 -28698 -19302

 

Тест 4: матрица с большими по модулю числами.

Исходная матрица:

 

0                    -2000000000  -2100000000  -2000000000  1

1000000000  -800000000     400000000 3                   15

0               -2000000000  -2000000000   -2000000000  1

1000000000  -800000000     400000000      3                    15

0                    -2000000000  -2000000000 -2000000000  1

1000000000  -800000000  400000000       3                   15

0                    -2000000000  -1900000000 -200000000   1

 

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

Максимальные элементы по строкам: 1; 1000000000; 1; 1000000000; 1; 1000000000; 1

Столбцы с максимальными элементами: 5; 1; 5; 1; 5; 1; 5

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

S1 = -7699999981

S2 = -7499999981

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

 

0                   -2000000000  -1900000000  -2000000000   1

1000000000 -800000000    400000000  3                15

0                   -2000000000 -2000000000   -2000000000    1

1000000000 -800000000  400000000  3                 15

0                   -2000000000  -2000000000  -2000000000    1

1000000000 -800000000     400000000      3                 15

0                   -2000000000  -2100000000   -2000000000     1

 

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

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

 

0                 -2000000000  -1900000000  -2000000000  1

0                      -2000000000  -2100000000  -2000000000    1

1000000000  -800000000    400000000       3                  15

0                      -2000000000  -2000000000  -2000000000 1

1000000000    -800000000    400000000   3                  15

0                      -2000000000  -2000000000    -2000000000  1

1000000000  -800000000    400000000        3                      15

 

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

Матрица, «развёрнутая» против часовой стрелки: 0; 1000000000; 0; 1000000000; 0; 1000000000; 0; -2000000000; -1900000000; -2000000000; 1; 15; 1; 15; 1; 15; 1; -2000000000; -2100000000; -2000000000; -800000000; -2000000000; -800000000; -2000000000; -800000000; 400000000; 3; -2000000000; 3; -2000000000; 3; 400000000; -2000000000; 400000000; -2000000000

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

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

 

1000000000    -800000000  400000000   3                          15

1000000000  -800000000  400000000  3                       15

1000000000    -800000000     400000000  3                            15

0                      -2000000000  -1900000000 -2000000000          1

0                      -2000000000 -2000000000 -2000000000     1

0                      -2000000000  -2000000000 -2000000000     1

0                 -2000000000  -2100000000 -2000000000     1

 

Тест 5: матрица с ошибками.

Исходная матрица:

 

9999999999 123 fdf

456 rt 8888888888

1234567890 9876543210 789

q 0xf e

-77777777777 000 -13

915 -376 19

ddd -ddd 1111111111

 

Внутри программы такая матрица будет интерпретирована следующим образом:

 

0                     123  0

456             0  0

1234567890  0      789

0                 15      0

0                      0        -13

915            -376  19

0                      0           1111111111

 

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

Максимальные элементы по строкам: 123; 456; 1234567890; 15; 0; 915; 1111111111

Столбцы с максимальными элементами: 2; 1; 1; 2; 1; 1; 3

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

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.


Дата: 2019-07-30, просмотров: 153.