48466 (Работа с двумерными числовыми массивами), страница 4

2016-07-30СтудИзба

Описание файла

Документ из архива "Работа с двумерными числовыми массивами", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "48466"

Текст 4 страницы из документа "48466"

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

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

  1. 30727 18102 20673 -32373 23140

  2. 4490 6540 -12901 20330 -6046

  3. -12309 26284 20788 -21316 -25044

  4. -15721 -14704 17504 -23934 21020

  5. -16762 -1303 5821 21065 -25295

  6. -16794 -24715 28069 -2485 -11281

  7. -27459 -22256 26705 14852 -30502

  8. -24472 27091 -6385 -13002 -22009

  9. 23701 -11502 -30162 -14325 -20739

  10. -27932 7054 -30557 -28698 -19302

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

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

  1. 0 -2000000000 -2100000000 -2000000000 1

  2. 1000000000 -800000000 400000000 3 15

  3. 0 -2000000000 -2000000000 -2000000000 1

  4. 1000000000 -800000000 400000000 3 15

  5. 0 -2000000000 -2000000000 -2000000000 1

  6. 1000000000 -800000000 400000000 3 15

  7. 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, матрица была изменена:

  1. 0 -2000000000 -1900000000 -2000000000 1

  2. 1000000000 -800000000 400000000 3 15

  3. 0 -2000000000 -2000000000 -2000000000 1

  4. 1000000000 -800000000 400000000 3 15

  5. 0 -2000000000 -2000000000 -2000000000 1

  6. 1000000000 -800000000 400000000 3 15

  7. 0 -2000000000 -2100000000 -2000000000 1

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

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

  1. 0 -2000000000 -1900000000 -2000000000 1

  2. 0 -2000000000 -2100000000 -2000000000 1

  3. 1000000000 -800000000 400000000 3 15

  4. 0 -2000000000 -2000000000 -2000000000 1

  5. 1000000000 -800000000 400000000 3 15

  6. 0 -2000000000 -2000000000 -2000000000 1

  7. 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

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

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

  1. 1000000000 -800000000 400000000 3 15

  2. 1000000000 -800000000 400000000 3 15

  3. 1000000000 -800000000 400000000 3 15

  4. 0 -2000000000 -1900000000 -2000000000 1

  5. 0 -2000000000 -2000000000 -2000000000 1

  6. 0 -2000000000 -2000000000 -2000000000 1

  7. 0 -2000000000 -2100000000 -2000000000 1

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

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

  1. 9999999999 123 fdf

  2. 456 rt 8888888888

  3. 1234567890 9876543210 789

  4. q 0xf e

  5. -77777777777 000 -13

  6. 915 -376 19

  7. ddd -ddd 1111111111

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

  1. 0 123 0

  2. 456 0 0

  3. 1234567890 0 789

  4. 0 15 0

  5. 0 0 -13

  6. 915 -376 19

  7. 0 0 1111111111

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

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

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

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

S1 = 123

S2 = 1111111130

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

  1. 0 0 1111111111

  2. 456 0 19

  3. 1234567890 0 789

  4. 0 15 0

  5. 0 0 -13

  6. 915 -376 0

  7. 0 123 0

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

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

  1. 0 0 1111111111

  2. 0 123 0

  3. 456 0 0

  4. 1234567890 0 789

  5. 0 15 0

  6. 0 0 -13

  7. 915 -376 19

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

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

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

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

  1. 1234567890 0 789

  2. 0 0 1111111111

  3. 915 -376 19

  4. 456 0 0

  5. 0 123 0

  6. 0 15 0

  7. 0 0 -13

Приложение 2. Полный листинг формы (файл form.pas)

  1. {

  2. Модуль, содержащий форму, переменную для хранения исходной матрицы,

  3. процедуры синхронизации содержания матрицы и элементов формы, а так же

  4. процедуру задания размеров матрицы

  5. }

  6. unit form;

  7. interface

  8. uses

  9. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  10. Dialogs, Menus, StdCtrls, ExtCtrls, ComCtrls, Grids,

  11. //модули программы

  12. fileIO, MatrixOperations;

  13. type

  14. TMainForm = class(TForm)

  15. Pages: TPageControl;

  16. Task1: TTabSheet;

  17. Task2: TTabSheet;

  18. Task3: TTabSheet;

  19. Task4: TTabSheet;

  20. Task5: TTabSheet;

  21. Menu: TMainMenu;

  22. A1: TMenuItem;

  23. load: TMenuItem;

  24. save: TMenuItem;

  25. N1: TMenuItem;

  26. quit: TMenuItem;

  27. N4: TMenuItem;

  28. M_Task1: TMenuItem;

  29. M_Task2: TMenuItem;

  30. M_Task3: TMenuItem;

  31. M_Task4: TMenuItem;

  32. M_Task5: TMenuItem;

  33. GroupBox1: TGroupBox;

  34. G_Matrix: TStringGrid;

  35. E_RowsN: TEdit;

  36. Label1: TLabel;

  37. Label2: TLabel;

  38. E_ColsN: TEdit;

  39. B_SetDimms: TButton;

  40. SaveDialog: TSaveDialog;

  41. OpenDialog: TOpenDialog;

  42. Label3: TLabel;

  43. Label4: TLabel;

  44. G_Task1B: TStringGrid;

  45. Label5: TLabel;

  46. Label6: TLabel;

  47. G_Task1C: TStringGrid;

  48. B_Task1Run: TButton;

  49. Label7: TLabel;

  50. Label8: TLabel;

  51. Label9: TLabel;

  52. E_Task2S1: TEdit;

  53. B_Task2Run: TButton;

  54. E_Task2S2: TEdit;

  55. L_Task2MatrxChanged: TLabel;

  56. Label10: TLabel;

  57. B_Task3Run: TButton;

  58. L_Task3Result: TLabel;

  59. Label11: TLabel;

  60. B_Task4Run: TButton;

  61. Label12: TLabel;

  62. B_Task5Run: TButton;

  63. about: TMenuItem;

  64. MEM_Task4: TMemo;

  65. procedure saveClick(Sender: TObject);

  66. procedure loadClick(Sender: TObject);

  67. procedure B_SetDimmsClick(Sender: TObject);

  68. procedure FormCreate(Sender: TObject);

  69. procedure quitClick(Sender: TObject);

  70. procedure M_Task1Click(Sender: TObject);

  71. procedure M_Task2Click(Sender: TObject);

  72. procedure M_Task3Click(Sender: TObject);

  73. procedure M_Task4Click(Sender: TObject);

  74. procedure M_Task5Click(Sender: TObject);

  75. procedure B_Task1RunClick(Sender: TObject);

  76. procedure FormDestroy(Sender: TObject);

  77. procedure B_Task2RunClick(Sender: TObject);

  78. procedure B_Task3RunClick(Sender: TObject);

  79. procedure B_Task4RunClick(Sender: TObject);

  80. procedure B_Task5RunClick(Sender: TObject);

  81. procedure aboutClick(Sender: TObject);

  82. private

  83. procedure readMatrix;

  84. procedure writeMatrix;

  85. public

  86. published

  87. { Public declarations }

  88. end;

  89. var

  90. MainForm: TMainForm;

  91. workMatrix: TMatrix;

  92. implementation

  93. uses Math;

  94. {$R *.dfm}

  95. {заполнить матрицу в соответствии с содержанием таблицы на форме}

  96. procedure TMainForm.ReadMatrix;

  97. var rowN, colN: integer;

  98. begin

  99. SetLength(workMatrix, G_Matrix.RowCount-1, G_Matrix.ColCount-1);

  100. for rowN:= 0 to G_Matrix.RowCount-2 do

  101. for colN:= 0 to G_Matrix.ColCount-2 do

  102. workMatrix[rowN, colN]:= StrToIntDef(G_Matrix.Cells[colN+1, rowN+1], 0);

  103. end;

  104. {заполнить таблицу на форме в соответствии с содержанием матрицы}

  105. procedure TMainForm.writeMatrix;

  106. var rowN, colN: integer;

  107. begin

  108. G_Matrix.Cells[1, 1]:= '';//если матрица пуста

  109. //обновим размеры матрицы

  110. E_RowsN.Text:= IntToStr(high(workMatrix) + 1);

  111. if(E_RowsN.Text <> '0') then

  112. E_ColsN.Text:= IntToStr(high(workMatrix[low(workMatrix)]) + 1)

  113. else E_ColsN.Text:= '0';

  114. B_SetDimmsClick(self);

  115. //заполним таблицу

  116. for rowN:= low(workMatrix) to high(workMatrix) do

  117. for colN:= low(workMatrix[rowN]) to high(workMatrix[rowN]) do

  118. G_Matrix.Cells[colN+1, rowN+1]:= IntToStr(workMatrix[rowN, colN]);

  119. end;

  120. {обработчик Файл->Сохранить}

  121. procedure TMainForm.saveClick(Sender: TObject);

  122. var

  123. outFile: TextFile;

  124. begin

  125. //отобразим диалог выбора файла для сохранения, если отмена - выходим

  126. if SaveDialog.Execute = false then exit;

  127. AssignFile(outFile, SaveDialog.Files[0]);

  128. ReWrite(outFile);//создадим файл

  129. readMatrix;//прочтём матрицу из таблицы

  130. Write2DArray(workMatrix, outFile);//запишем матрицу в файл

  131. CloseFile(outFile);//закроем файл

  132. end;

  133. {обработчик Файл->Загрузить}

  134. procedure TMainForm.loadClick(Sender: TObject);

  135. var

  136. inFile: TextFile;

  137. begin

  138. //отобразим диалог выбора фала для загрузки, если отмена - выходим

  139. if OpenDialog.Execute = false then exit;

  140. AssignFile(inFile, OpenDialog.Files[0]);

  141. Reset(inFile);//подготовим файл к чтению

  142. Read2DArray(workMatrix, inFile);//прочтём матрицу из файла

  143. writeMatrix;//отобразим матрицу

  144. CloseFile(inFile);//закроем файл

  145. end;

  146. {обраюотчик уствновки размеров матрицы}

  147. procedure TMainForm.B_SetDimmsClick(Sender: TObject);

  148. var

  149. i: integer;

  150. RowsN, ColsN: integer;

  151. begin

  152. //значения размеров не должны быть меньше 1

  153. RowsN:= StrToIntDef(E_RowsN.Text, 0);

  154. if RowsN < 1 then begin RowsN:= 1; E_RowsN.Text:= '1' end;

  155. ColsN:= StrToIntDef(E_ColsN.Text, 0);

  156. if ColsN < 1 then begin ColsN:= 1; E_ColsN.Text:= '1' end;

  157. //число строк и столбцов в таблице, учитывая колонку и строку с номерами

  158. G_Matrix.RowCount:= RowsN + 1;

  159. G_Matrix.ColCount:= ColsN + 1;

  160. //в этих таблицах отображаются одномерные массивы из первого задания

  161. G_Task1B.RowCount:= RowsN;

  162. G_Task1C.RowCount:= RowsN;

  163. //одномерный массив из четвёртого задания имеет длину, равную числу элементов исходной матрицы

  164. //G_Task4.ColCount:= RowsN * ColsN;

  165. //расставим номера строк и столбцов

  166. for i:= 0 to RowsN do

  167. begin

  168. G_Matrix.Cells[0, i+1]:= IntToStr(i+1);

  169. G_Task1B.Cells[0, i]:= IntToStr(i+1);

  170. G_Task1C.Cells[0, i]:= IntToStr(i+1);

  171. end;

  172. for i:= 0 to ColsN do

  173. G_Matrix.Cells[i+1, 0]:= IntToStr(i+1);

  174. //for i:= 0 to RowsN * ColsN do

  175. // G_Task4.Cells[i, 0]:= IntToStr(i+1);

  176. G_Matrix.Refresh;

  177. end;

  178. {при создании формы задаём размер матрицы по умолчанию}

  179. procedure TMainForm.FormCreate(Sender: TObject);

  180. begin

  181. B_SetDimmsClick(Sender);

  182. end;

  183. {при уничтожении формы освобождаем память, выделенную для хранения матрицы}

  184. procedure TMainForm.FormDestroy(Sender: TObject);

  185. begin

  186. workMatrix:= nil;

  187. end;

  188. {обработчик Файл->Выход}

  189. procedure TMainForm.quitClick(Sender: TObject);

  190. begin

  191. if mrYes = MessageDlg('Вы уверены, что хотите выйти?', mtConfirmation, [mbYes, mbNo], 0)

  192. then Close;

  193. end;

  194. {обработчик Задачи->задача 1}

  195. procedure TMainForm.M_Task1Click(Sender: TObject);

  196. begin

  197. Pages.ActivePageIndex:= 0;

  198. end;

  199. {обработчик Задачи->задача 2}

  200. procedure TMainForm.M_Task2Click(Sender: TObject);

  201. begin

  202. Pages.ActivePageIndex:= 1;

  203. end;

  204. {обработчик Задачи->задача 3}

  205. procedure TMainForm.M_Task3Click(Sender: TObject);

  206. begin

  207. Pages.ActivePageIndex:= 2;

  208. end;

  209. {обработчик Задачи->задача 4}

  210. procedure TMainForm.M_Task4Click(Sender: TObject);

  211. begin

  212. Pages.ActivePageIndex:= 3;

  213. end;

  214. {обработчик Задачи->задача 5}

  215. procedure TMainForm.M_Task5Click(Sender: TObject);

  216. begin

  217. Pages.ActivePageIndex:= 4;

  218. end;

  219. {выполнение первого задания}

  220. procedure TMainForm.B_Task1RunClick(Sender: TObject);

  221. var

  222. maxVal: TVector; //массив максимальных элементов из каждой строки

  223. maxValCol: TVector; //массив номеров столбцов с максимальными элементами

  224. RowN: integer;

  225. begin

  226. readMatrix;//прочитаем матрицу из таблицы

  227. GetMaxVals(maxVal, maxValCol, workMatrix);//сформируем массивы по заданию

  228. for RowN:= low(maxVal) to high(maxVal) do

  229. begin//выведем сформированные массивы в элементы формы

  230. G_Task1B.Cells[1, RowN]:= IntToStr(maxVal[RowN]);

  231. G_Task1C.Cells[1, RowN]:= IntToStr(maxValCol[RowN]+1);

  232. end;

  233. //освободим память

  234. maxVal:= nil;

  235. maxValCol:= nil;

  236. end;

  237. {выполнение второго задания}

  238. procedure TMainForm.B_Task2RunClick(Sender: TObject);

  239. var S1, S2: Int64;//суммы выше и ниже пересечения диагоналей

  240. begin

  241. readMatrix;//проситаем матрицу из таблицы

  242. //высчитаем суммы

  243. S1:= GetSumAbove(workMatrix);

  244. S2:= GetSumBelow(workMatrix);

  245. //выведем суммы в элементы формы

  246. E_Task2S1.Text:= IntToStr(S1);

  247. E_Task2S2.Text:= IntToStr(S2);

  248. if S1 >= S2 then L_Task2MatrxChanged.Caption:= 'Матрица не была изменена'

  249. else

  250. begin//если S1 < S2, то

  251. SwapAboveBelow(workMatrix);//меняем местами элементы выше и ниже пересечения диагоналей

  252. writeMatrix;//выводим изменённую матрицу на форму

  253. L_Task2MatrxChanged.Caption:= 'Матрица была изменена'

  254. end;

  255. end;

  256. {выполнение третьего задания}

  257. procedure TMainForm.B_Task3RunClick(Sender: TObject);

  258. begin

  259. readMatrix;//прочтём матрицу из таблицы

  260. if (high(workMatrix)+1) mod 2 = 0 then

  261. begin//если число строк - чётное

  262. CircuarShift(workMatrix, true);//осуществим циклический сдвиг вверх

  263. L_Task3Result.Caption:= 'был произведён сдвиг "вверх"';

  264. end

  265. else

  266. begin//иначе, если число строк - нечётное

  267. CircuarShift(workMatrix, false);//осуществим циклический сдвиг вниз

  268. L_Task3Result.Caption:= 'был произведён сдвиг "вниз"';

  269. end;

  270. writeMatrix;//выведем изменённую матрицу в таблицу

  271. end;

  272. {выполнение четвёртого задания}

  273. procedure TMainForm.B_Task4RunClick(Sender: TObject);

  274. var arrayB: TVector;//массив, содержащий "развёрнутую" матрицу

  275. var i: integer;

  276. begin

  277. readMatrix;//прочтём матрицу из таблицы

  278. UnwindMatrix(workMatrix, arrayB);//наполним массив, обходя матрицу по спирали

  279. MEM_Task4.Lines[0]:= '';

  280. for i:= 0 to high(arrayB) do

  281. begin//выведем все элементы из массива на форму

  282. //G_Task4.Cells[i, 1]:= IntToStr(arrayB[i]);

  283. MEM_Task4.Lines[0]:= MEM_Task4.Lines[0] + IntToStr(arrayB[i]) + '; '

  284. end;

  285. arrayB:= nil;//освободим память

  286. end;

  287. {выполнение пятого задания}

  288. procedure TMainForm.B_Task5RunClick(Sender: TObject);

  289. begin

  290. readMatrix;//прочтём матрицу из таблицы

  291. SortRows(workMatrix);//отсортируем строки матрицы по убыванию сумм

  292. writeMatrix;//выведем матрицу в таблицу

  293. end;

  294. {обработчик About}

  295. procedure TMainForm.aboutClick(Sender: TObject);

  296. var info: string;

  297. begin

  298. info:= 'Курсовая работа по дисциплине "Программирование на ЯВУ"'#10#10 +

  299. 'Тема: "Работа с двумерными числовыми массивами"'#10 +

  300. 'Выполнил: студент группы ВСМ-06-08 Филон Д. В.'#10#10#10 +

  301. #9#9#9#9#9#9'Москва 2010 год';

  302. MessageDlg(info, mtInformation, [mbIgnore], 0);

  303. end;

  304. end.

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Нет! Мы не выполняем работы на заказ, однако Вы можете попросить что-то выложить в наших социальных сетях.
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
4144
Авторов
на СтудИзбе
666
Средний доход
с одного платного файла
Обучение Подробнее