Advertisement
dxvmxnd

Untitled

Mar 3rd, 2024
17
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.80 KB | None | 0 0
  1. Program Lab_matrix;
  2.  
  3. uses
  4. System.SysUtils;
  5.  
  6. Type
  7. TArray = Array Of Integer;
  8. TMatrix = Array Of TArray;
  9.  
  10. Procedure OutputTask();
  11. Begin
  12. Writeln('Данная программа сортирует строки матрицы методом простого выбора.');
  13. End;
  14.  
  15. Function ChooseInput() : Boolean;
  16. Var
  17. IsCorrect : Boolean;
  18. Num : Integer;
  19. Begin
  20. Repeat
  21. Writeln('Выберите откуда вводить данные: 0, если из консоли, 1 если из файла:');
  22. IsCorrect := True;
  23. Try
  24. Readln(Num);
  25. Except
  26. IsCorrect := False;
  27. End;
  28. If (Not IsCorrect) Or ((Num <> 0) And (Num <> 1)) Then
  29. Begin
  30. IsCorrect := False;
  31. Writeln('Ошибка ввода! Повторите попытку.');
  32. End;
  33. Until IsCorrect;
  34.  
  35. ChooseInput := (Num = 1);
  36. End;
  37.  
  38. Function ChoosePath() : String;
  39. Var
  40. Path : String;
  41. IsCorrect : Boolean;
  42. InputFile : TextFile;
  43. Begin
  44. Begin
  45. Repeat
  46. Writeln('Введите путь к файлу для ввода информации: ');
  47. IsCorrect := True;
  48. Readln(Path);
  49. Try
  50. AssignFile(InputFile, Path);
  51. Reset(InputFile);
  52. Except
  53. IsCorrect := False;
  54. End;
  55. If (Not IsCorrect) Or (Length(Path) < 5) Then
  56. Begin
  57. IsCorrect := False;
  58. Writeln('Ошибка ввода! Повторите попытку.');
  59. End
  60. Else
  61. Begin
  62. If ((Path[High(Path)] <> 't') And (Path[High(Path) - 1] <> 'x') And (Path[High(Path) - 2] <> 't') And (Path[High(Path) - 3] <> '.')) Then
  63. Begin
  64. IsCorrect := False;
  65. Writeln('Ошибка ввода! Повторите попытку.');
  66. End;
  67. End;
  68. Until IsCorrect;
  69. End;
  70.  
  71. CloseFile(InputFile);
  72.  
  73. ChoosePath := Path;
  74. End;
  75.  
  76. Function InputSizeFromConsole() : Integer;
  77. Var
  78. IsCorrect : Boolean;
  79. Size : Integer;
  80. Begin
  81. Repeat
  82. IsCorrect := True;
  83. Writeln('Введите размер матрицы(от 2 до 100):');
  84. Try
  85. Readln(Size);
  86. Except
  87. IsCorrect := False;
  88. End;
  89. If (Not IsCorrect) Or (Size < 2) Or (Size > 100) Then
  90. Begin
  91. IsCorrect := False;
  92. Writeln('Ошибка ввода! Повторите попытку.');
  93. End;
  94. Until IsCorrect;
  95.  
  96. InputSizeFromConsole := Size;
  97. End;
  98.  
  99. Function InputSizeFromFile(Path : String) : Integer;
  100. Var
  101. Size : Integer;
  102. IsCorrect : Boolean;
  103. InputFile : TextFile;
  104. Begin
  105. AssignFile(InputFile, Path);
  106. Reset(InputFile);
  107. IsCorrect := True;
  108. Writeln('Запись размера...');
  109. Try
  110. Readln(InputFile, Size)
  111. Except
  112. IsCorrect := False;
  113. End;
  114. If (Not IsCorrect) Or (Size < 2) Or (Size > 100) Then
  115. Begin
  116. IsCorrect := False;
  117. Writeln('Ошибка ввода! Введите размер с клавиатуры.');
  118. Size := InputSizeFromConsole();
  119. End;
  120. CloseFile(InputFile);
  121.  
  122. InputSizeFromFile := Size;
  123. End;
  124.  
  125. Function ExceptionRead(I, J : Integer) : Integer;
  126. Var
  127. IsCorrect : Boolean;
  128. Num : Integer;
  129. Begin
  130. Repeat
  131. Writeln('Введите [', I+1, ' , ', J+1, '] элемент матрицы:');
  132. IsCorrect := True;
  133. Try
  134. Readln(Num);
  135. Except
  136. IsCorrect := False;
  137. Writeln('Ошибка ввода! Повторите попытку.');
  138. End;
  139. Until IsCorrect;
  140.  
  141. ExceptionRead := Num;
  142. End;
  143.  
  144. Function FillMatrixFromFile(Path : String; Matrix : TMatrix) : TMatrix;
  145. Var
  146. I, J : Integer;
  147. InputFile : TextFile;
  148. Begin
  149. Writeln('Запись матрицы...');
  150. AssignFile(InputFile, Path);
  151. Reset(InputFile);
  152. Readln(InputFile);
  153. For I := 0 To High(Matrix) Do
  154. Begin
  155. For J := 0 To High(Matrix) Do
  156. Begin
  157. Try
  158. Read(InputFile, Matrix[I, J]);
  159. Except
  160. Writeln('Ошибка ввода! Введите [', I+1, ' , ', J+1, '] элемент матрицы с клавиатуры.');
  161. Matrix[I, J] := ExceptionRead(I, J);
  162. End;
  163. End;
  164. Readln(InputFile);
  165. End;
  166.  
  167. CloseFile(InputFile);
  168.  
  169. FillMatrixFromFIle := Matrix;
  170. End;
  171.  
  172. Function InputMatrixFromFile() : TMatrix;
  173. Var
  174. Path : String;
  175. Matrix : TMatrix;
  176. Size : Integer;
  177. Begin
  178. Path := ChoosePath();
  179. Size := InputSizeFromFile(Path);
  180. SetLength(Matrix, Size, Size);
  181. Matrix := FillMatrixFromFile(Path, Matrix);
  182.  
  183. InputMatrixFromFile := Matrix;
  184. End;
  185.  
  186. Function FillMatrixFromConsole(Matrix : TMatrix) : TMatrix;
  187. Var
  188. I, J : Integer;
  189. IsCorrect : Boolean;
  190. Begin
  191. For I := 0 To High(Matrix) Do
  192. Begin
  193. For J := 0 To High(Matrix) Do
  194. Begin
  195. Repeat
  196. Writeln('Введите [', I+1, ' , ', J+1, '] элемент матрицы:');
  197. IsCorrect := True;
  198. Try
  199. Readln(Matrix[I, J]);
  200. Except
  201. IsCorrect := False;
  202. Writeln('Ошибка ввода! Повторите попытку.');
  203. End;
  204. Until IsCorrect;
  205. End;
  206. End;
  207.  
  208. FillMatrixFromConsole := Matrix;
  209. End;
  210.  
  211. Function InputMatrixFromConsole() : TMatrix;
  212. Var
  213. Size : Integer;
  214. Matrix : TMatrix;
  215. Begin
  216. Size := InputSizeFromConsole();
  217. SetLength(Matrix, Size, Size);
  218. Matrix := FillMatrixFromConsole(Matrix);
  219.  
  220. InputMatrixFromConsole := Matrix;
  221. End;
  222.  
  223. Function InputMatrix(IsFromFile : Boolean) : TMatrix;
  224. Var
  225. Matrix : TMatrix;
  226. Begin
  227. If IsFromFile Then
  228. Matrix := InputMatrixFromFile()
  229. Else
  230. Matrix := InputMatrixFromConsole();
  231.  
  232. InputMatrix := Matrix;
  233. End;
  234.  
  235. Function SortingRow(Arr : TArray) : TArray;
  236. Var
  237. I, J, MinIndex, Temp, N : Integer;
  238. Begin
  239. N := High(Arr) + 1;
  240. For I := 0 To (N - 2) Do
  241. Begin
  242. MinIndex := I;
  243. For J := (I + 1) To (N - 1) Do
  244. Begin
  245. If(Arr[J] < Arr[MinIndex]) Then
  246. MinIndex := J;
  247. End;
  248. If (MinIndex <> I) Then
  249. Begin
  250. Temp := Arr[I];
  251. Arr[I] := Arr[MinIndex];
  252. Arr[MinIndex] := Temp;
  253. End;
  254. End;
  255.  
  256. SortingRow := Arr;
  257. End;
  258.  
  259. Function Sorting(Matrix : TMatrix) : TMatrix;
  260. Var
  261. NumberOfRow : Integer;
  262. Row : TArray;
  263. Begin
  264. For NumberOfRow := 0 To High(Matrix) Do
  265. Begin
  266. Row := SortingRow(Matrix[NumberOfRow]);
  267. Matrix[NumberOfRow] := Row;
  268. End;
  269.  
  270. Sorting := Matrix;
  271. End;
  272.  
  273. Function ChoosePathForOutput() : String;
  274. Var
  275. Path : String;
  276. IsCorrect : Boolean;
  277. OutputFile : TextFile;
  278. Begin
  279. Begin
  280. Repeat
  281. Writeln('Введите путь к файлу для вывода информации: ');
  282. IsCorrect := True;
  283. Readln(Path);
  284. Try
  285. AssignFile(OutputFile, Path);
  286. Reset(OutputFile);
  287. Except
  288. IsCorrect := False;
  289. End;
  290. If (Not IsCorrect) Or (Length(Path) < 5) Then
  291. Begin
  292. IsCorrect := False;
  293. Writeln('Ошибка ввода! Повторите попытку.');
  294. End
  295. Else
  296. Begin
  297. If ((Path[High(Path)] <> 't') And (Path[High(Path) - 1] <> 'x') And (Path[High(Path) - 2] <> 't') And (Path[High(Path) - 3] <> '.')) Then
  298. Begin
  299. IsCorrect := False;
  300. Writeln('Ошибка ввода! Повторите попытку.');
  301. End;
  302. End;
  303. Until IsCorrect;
  304. End;
  305.  
  306. CloseFile(OutputFile);
  307.  
  308. ChoosePathForOutput := Path;
  309. End;
  310.  
  311. Procedure OutputInFile(Matrix : TMatrix);
  312. Var
  313. Path : String;
  314. OutputFile : TextFile;
  315. I, J : Integer;
  316. Begin
  317. Path := ChoosePathForOutput();
  318. AssignFile(OutputFile, Path);
  319. Append(OutputFile);
  320. Writeln(OutputFile, #13#10'Матрица, строки который были отсортированы методом простого выбора: ');
  321. For I := 0 To High(Matrix) Do
  322. Begin
  323. For J := 0 To High(Matrix) Do
  324. Write(OutputFile, Matrix[I][J], ' ');
  325. Writeln(OutputFile);
  326. End;
  327.  
  328. Writeln('Данные успешно записаны в файл!');
  329. End;
  330.  
  331. Procedure OutputAnswer(Matrix : TMatrix);
  332. Var
  333. I, J : Integer;
  334. Begin
  335. Writeln('Матрица, строки который были отсортированы методом простого выбора: ');
  336. For I := 0 To High(Matrix) Do
  337. Begin
  338. For J := 0 To High(Matrix) Do
  339. Write(Matrix[I][J], ' ');
  340. Writeln;
  341. End;
  342.  
  343.  
  344. OutputInFile(Matrix);
  345. End;
  346.  
  347. Procedure OutputMatrix(Matrix : TMatrix);
  348. Var
  349. I, J : Integer;
  350. Begin
  351. Writeln('Исходная матрица: ');
  352. For I := 0 To High(Matrix) Do
  353. Begin
  354. For J := 0 To High(Matrix) Do
  355. Begin
  356. Write(Matrix[I, J], ' ');
  357. End;
  358. Writeln;
  359. End;
  360.  
  361. End;
  362.  
  363. Var
  364. IsFromFile : Boolean;
  365. Size , LargestNegativeNumber : Integer;
  366. Matrix, SortedMatrix : TMatrix;
  367. Begin
  368. OutputTask();
  369. IsFromFile := ChooseInput();
  370. Matrix := InputMatrix(IsFromFile);
  371. OutputMatrix(Matrix);
  372. SortedMatrix := Sorting(Matrix);
  373. OutputAnswer(SortedMatrix);
  374.  
  375. Readln;
  376. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement