Advertisement
dxvmxnd

Untitled

Oct 29th, 2023 (edited)
10
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.64 KB | None | 0 0
  1. Program L2_3_D;
  2.  
  3. Uses
  4. System.SysUtils;
  5.  
  6. Type
  7. TArray = Array of Array of Integer;
  8.  
  9. Var
  10. IsCorrect : Boolean;
  11. Choice, MaxRes : Integer;
  12. Matrix : TArray;
  13.  
  14. Procedure TaskEssence();
  15. Begin
  16. Writeln('Данная программа находит наибольшую сумму модулей элементов строк матрицы.');
  17. End;
  18.  
  19. Function PathChoice() : String;
  20. Var
  21. TFile : TextFile;
  22. Path : String;
  23.  
  24. Begin
  25. Repeat
  26. IsCorrect := True;
  27. Writeln('Введите путь файла: ');
  28. Try
  29. Readln(Path);
  30. AssignFile(TFile, Path);
  31. Reset(TFile);
  32. Except
  33. IsCorrect := False;
  34. Writeln('Неверный путь файла!');
  35. End;
  36. Until IsCorrect;
  37. Writeln('Файл успешно открыт!');
  38. PathChoice := Path;
  39. CloseFile(TFile);
  40. End;
  41.  
  42. Function SizeRowFile(Path : String; var TFile : TextFile) : Integer;
  43. Var
  44. SizeI, Correct : Integer;
  45.  
  46. Begin
  47. AssignFile(TFile, Path);
  48. Reset(TFile);
  49. IsCorrect := True;
  50. Writeln('Запись количества строк...');
  51. Try
  52. Readln(TFile, SizeI);
  53. Except
  54. IsCorrect := False;
  55. End;
  56. If ((SizeI < 1) Or (IsCorrect = False)) Then
  57. Begin
  58. Writeln('Ошибка! Неверный ввод размера! Измените входные данные в файле, затем перезапустите программу.');
  59. Correct := 0;
  60. While (Correct = 0) Do
  61. Readln;
  62. End;
  63.  
  64. Writeln('Количество строк: ', SizeI);
  65. CloseFile(TFile);
  66. SizeRowFile := SizeI;
  67.  
  68. End;
  69.  
  70. Function SizeColumnFile(Path : String; var TFile : TextFile) : Integer;
  71. Var
  72. SizeJ, Correct : Integer;
  73.  
  74. Begin
  75. AssignFile(TFile, Path);
  76. Reset(TFile);
  77. IsCorrect := True;
  78. Writeln('Запись количества столбцов...');
  79. Try
  80. Readln(TFile, SizeJ);
  81. Except
  82. IsCorrect := False;
  83. End;
  84. If ((SizeJ < 1) Or (IsCorrect = False)) Then
  85. Begin
  86. Writeln('Ошибка! Неверный ввод размера! Измените входные данные в файле, затем перезапустите программу.');
  87. Correct := 0;
  88. While (Correct = 0) Do
  89. Readln;
  90. End;
  91.  
  92. Writeln('Количество столбцов: ', SizeJ);
  93. CloseFile(TFile);
  94. SizeColumnFile := SizeJ;
  95.  
  96. End;
  97.  
  98. Function MatrixReadFile(Path : String; SizeI, SizeJ : Integer; var TFile : TextFile; Matrix : TArray) : TArray;
  99. Var
  100. I, J, Correct : Integer;
  101. Line : String;
  102.  
  103. Begin
  104. AssignFile(TFile, Path);
  105. Reset(TFile);
  106. Dec(SizeI);
  107. Dec(SizeJ);
  108. IsCorrect := True;
  109. Readln(TFile, Line);
  110. Readln(TFile, Line);
  111.  
  112. Writeln('Запись матрицы...');
  113. For I := 0 To (SizeI) Do
  114. Begin
  115. For J := 0 To (SizeJ) Do
  116. Begin
  117. Try
  118. Read(TFile, Matrix[I][J])
  119. Except
  120. IsCorrect := False;
  121. Writeln(' Неверный ввод данных! Исправьте элемент матрицы с адресом', I+1, ' ', J+1, ' и перезапустите программу');
  122. Correct := 0;
  123. While (Correct = 0) Do
  124. Readln;
  125. End;
  126. Write(Matrix[I][J], ' ');
  127. End;
  128. Writeln;
  129. End;
  130. CloseFile(TFile);
  131.  
  132. MatrixReadFile := Matrix;
  133.  
  134. End;
  135.  
  136. Function MatrixCout(const Arr : TArray) : Integer;
  137.  
  138. Var
  139. Sum, MaxSum, I, J : Integer;
  140. Begin
  141. Sum := 0;
  142. MaxSum := 0;
  143.  
  144. For I := 0 To High(Arr) Do
  145. Begin
  146. For J := 0 To High(Arr[I]) Do
  147. Begin
  148. Sum := Sum + Abs(Arr[I][J]);
  149. End;
  150. If (Sum > MaxSum) Then
  151. MaxSum := Sum;
  152. Sum := 0;
  153. End;
  154. MatrixCout := MaxSum;
  155.  
  156. End;
  157.  
  158. Procedure Output(Result : Integer);
  159. Var
  160. TFile : TextFile;
  161. Path : String;
  162. Begin
  163. Writeln('Максимальная сумма модулей элементов строк: ', Result);
  164. Repeat
  165. IsCorrect := True;
  166. Writeln('Введите путь файла для вывода: ');
  167. Try
  168. Readln(Path);
  169. AssignFile(TFile, Path);
  170. Reset(TFile);
  171. Except
  172. IsCorrect := False;
  173. Writeln('Неверный путь файла!');
  174. End;
  175. Until IsCorrect;
  176. Append(TFile);
  177. Writeln(TFile);
  178. Writeln(TFile, 'Максимальная сумма модулей элементов строк: ', Result);
  179. CloseFile(TFile);
  180. Writeln('Данные записаны в файл.');
  181. Readln;
  182.  
  183. End;
  184.  
  185. Function FromFile() : TArray;
  186.  
  187. Var
  188. Path : String;
  189. SizeI, SizeJ, MaxRes : Integer;
  190. TFile : TextFile;
  191. Matrix : TArray;
  192.  
  193. Begin
  194. Writeln('При записи данных из файла, учтите, что на первой строке написано количество строк матрицы, на второй - количество столбцов, а далее с новой строки прописывается сама матрица.');
  195. Path := PathChoice();
  196. SizeI := SizeRowFile(Path, TFile);
  197. SizeJ := SizeColumnFile(Path, TFile);
  198. SetLength(Matrix, SIzeI, SizeJ);
  199. Matrix := MatrixReadFile(Path, SizeI, SizeJ, TFile, Matrix);
  200.  
  201. FromFile := Matrix;
  202. End;
  203.  
  204. Function SizeRowConsole() : Integer;
  205. Var
  206. IsCorrect : Boolean;
  207. SizeI : Integer;
  208. Begin
  209. Repeat
  210. IsCorrect := True;
  211. Writeln('Введите количество строк в матрице');
  212. Try
  213. Readln(SizeI);
  214. Except
  215. IsCorrect := False;
  216. Writeln('Неверный тип данных');
  217. End;
  218. If (SizeI < 1) Then
  219. Begin
  220. IsCorrect := False;
  221. Writeln('Неверный тип данных');
  222. End;
  223. Until IsCorrect;
  224.  
  225. SizeRowConsole := SizeI;
  226. End;
  227.  
  228. Function SizeColumnConsole() : Integer;
  229. Var
  230. IsCorrect : Boolean;
  231. SizeJ : Integer;
  232. Begin
  233. Repeat
  234. IsCorrect := True;
  235. Writeln('Введите количество столбцов в матрице');
  236. Try
  237. Readln(SizeJ);
  238. Except
  239. IsCorrect := False;
  240. Writeln('Неверный тип данных');
  241. End;
  242. If (SizeJ < 1) Then
  243. Begin
  244. IsCorrect := False;
  245. Writeln('Неверный тип данных');
  246. End;
  247. Until IsCorrect;
  248.  
  249. SizeColumnConsole := SizeJ;
  250.  
  251. End;
  252.  
  253. Function MatrixReadConsole(SizeI, SizeJ : Integer; Matrix : TArray) : TArray;
  254. Var
  255. IsCorrect : Boolean;
  256. I, J : Integer;
  257. Begin
  258. Dec(SizeI);
  259. Dec(SizeJ);
  260.  
  261. For I := 0 To SizeI Do
  262. Begin
  263. For J := 0 To SizeJ Do
  264. Begin
  265. Repeat
  266. IsCorrect := True;
  267. Writeln('Введите элемент с индексом ', I+1,',', J+1);
  268. Try
  269. Readln(Matrix[I][J]);
  270. Except
  271. IsCorrect := False;
  272. Writeln('Неверный тип данных');
  273. End;
  274. Until IsCorrect;
  275. Write(Matrix[I][J], ' ');
  276. End;
  277. Writeln;
  278. End;
  279.  
  280. MatrixReadConsole := Matrix;
  281. End;
  282.  
  283. Function FromConsole() : TArray;
  284.  
  285. Var
  286. SizeI, SizeJ, MaxSum : Integer;
  287. Matrix : TArray;
  288.  
  289. Begin
  290. SizeI := SizeRowConsole();
  291. SizeJ := SizeColumnConsole();
  292. SetLength(Matrix, SizeI, SizeJ);
  293. Matrix := MatrixReadConsole(SizeI, SizeJ, Matrix);
  294.  
  295. FromConsole := Matrix;
  296. End;
  297.  
  298. Function SourceChoice() : Integer;
  299. Var
  300. ChoiceNumber : Integer;
  301. Begin
  302. Writeln('Выберите, откуда будут вводиться данные:');
  303. Repeat
  304. IsCorrect := True;
  305. Writeln('Введите 0, если с консоли; введите 1, если с файла.');
  306. Try
  307. Readln(ChoiceNumber);
  308. Except
  309. IsCorrect := False;
  310. End;
  311. If ((IsCorrect = False) Or ((ChoiceNumber <> 1) And (ChoiceNumber <> 0))) Then
  312. Begin
  313. Writeln('Неверный ввод данных!');
  314. IsCorrect := False;
  315. End;
  316. Until IsCorrect;
  317.  
  318. SourceChoice := ChoiceNumber;
  319. End;
  320.  
  321. Begin
  322. TaskEssence();
  323. Choice := SourceChoice();
  324. If (Choice = 0) Then
  325. Matrix := FromConsole()
  326. Else
  327. Matrix := FromFile();
  328. MaxRes := MatrixCout(Matrix);
  329. Output(MaxRes);
  330. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement