Advertisement
dxvmxnd

Untitled

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