Advertisement
dxvmxnd

Untitled

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