Advertisement
dxvmxnd

Untitled

Nov 11th, 2023
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.05 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 ReadingExcept(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. ReadingExcept := Number;
  28. End;
  29.  
  30. Procedure OutputTaskEssence(); //выводит суть задания
  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) 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 InputSizeRowFromFile(Path : String; var TextF : TextFile) : Integer; //ввод кол-ва строк с файла
  109. Var
  110. SizeI : Integer;
  111. IsCorrect : Boolean;
  112.  
  113. Begin
  114. AssignFile(TextF, Path);
  115. Reset(TextF);
  116. IsCorrect := True;
  117. Writeln('Запись количества строк...');
  118. Try
  119. Readln(TextF, 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(TextF);
  130. InputSizeRowFromFile := SizeI;
  131. End;
  132.  
  133. Function SizeColumnFile(Path : String; var TextF : TextFile) : Integer; //ввод кол-ва столбцов с файла
  134. Var
  135. SizeJ : Integer;
  136. Line : String;
  137. IsCorrect : Boolean;
  138.  
  139. Begin
  140. AssignFile(TextF, Path);
  141. Reset(TextF);
  142. Readln(TextF, Line);
  143. IsCorrect := True;
  144. Writeln('Запись количества столбцов...');
  145. Try
  146. Readln(TextF, 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(TextF);
  158. SizeColumnFile := SizeJ;
  159.  
  160. End;
  161.  
  162. Function MatrixReadFromFile(Path : String; SizeI, SizeJ : Integer; var TextF : TextFile; Matrix : TArray) : TArray; //ввод самой матрицы с файла
  163. Var
  164. I, J, Correct : Integer;
  165. Line : String;
  166. IsCorrect : Boolean;
  167.  
  168. Begin
  169. AssignFile(TextF, Path);
  170. Reset(TextF);
  171. Dec(SizeI);
  172. Dec(SizeJ);
  173. IsCorrect := True;
  174. Readln(TextF, Line);
  175. Readln(TextF, 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(TextF, Matrix[I][J])
  184. Except
  185. IsCorrect := False;
  186. Writeln(' Неверный ввод данных! Введите элемент матрицы с размером ', I+1, ' ', J+1, ' с клавиатуры.');
  187. Matrix[I][J] := ReadingExcept(I, J);
  188. End;
  189. End;
  190. End;
  191. CloseFile(TextF);
  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. MatrixReadFromFile := Matrix;
  202.  
  203. End;
  204.  
  205. Function MatrixCount(const Arr : TArray) : Integer;
  206. Begin
  207. // ТУТ ПРОИСХОДЯТ САМИ РАССЧЕТЫ
  208.  
  209. MatrixCount := 0;
  210.  
  211. End;
  212.  
  213. Procedure Output(Result : Integer); //вывод ответа
  214. Var
  215. TextF : TextFile;
  216. Path : String;
  217. IsCorrect : Boolean;
  218.  
  219. Begin
  220. Writeln('Максимальная сумма модулей элементов строк: ', Result);
  221. Repeat
  222. IsCorrect := True;
  223. Writeln('Введите путь файла для вывода: ');
  224. Try
  225. Readln(Path);
  226. AssignFile(TextF, Path);
  227. Reset(TextF);
  228. Except
  229. IsCorrect := False;
  230. Writeln('Неверный путь файла!');
  231. End;
  232. Until IsCorrect;
  233. Append(TextF);
  234. Writeln(TextF);
  235. Writeln(TextF, 'Максимальная сумма модулей элементов строк: ', Result);
  236. CloseFile(TextF);
  237. Writeln('Данные записаны в файл.');
  238. Readln;
  239.  
  240. End;
  241.  
  242. Function InputFromFile() : TArray; //алгос для считывания с файла
  243.  
  244. Var
  245. Path : String;
  246. SizeI, SizeJ, MaxRes : Integer;
  247. TextF : TextFile;
  248. Matrix : TArray;
  249.  
  250. Begin
  251. Writeln('При записи данных из файла, учтите, что на первой строке написано количество строк матрицы, на второй - количество столбцов, а далее с новой строки прописывается сама матрица.');
  252. Path := PathChoice();
  253. SizeI := InputSizeRowFromFile(Path, TextF);
  254. SizeJ := SizeColumnFile(Path, TextF);
  255. SetLength(Matrix, SIzeI, SizeJ);
  256. Matrix := MatrixReadFromFile(Path, SizeI, SizeJ, TextF, Matrix);
  257.  
  258. InputFromFile := Matrix;
  259. End;
  260.  
  261. Function MatrixReadConsole(SizeI, SizeJ : Integer; Matrix : TArray) : TArray; //считывание самой матрицы с консоли
  262. Var
  263. IsCorrect : Boolean;
  264. I, J : Integer;
  265. Begin
  266. Dec(SizeI);
  267. Dec(SizeJ);
  268.  
  269. For I := 0 To SizeI Do
  270. Begin
  271. For J := 0 To SizeJ Do
  272. Begin
  273. Repeat
  274. IsCorrect := True;
  275. Writeln('Введите элемент с индексом ', I+1,',', J+1);
  276. Try
  277. Readln(Matrix[I][J]);
  278. Except
  279. IsCorrect := False;
  280. Writeln('Неверный тип данных');
  281. End;
  282. Until IsCorrect;
  283. Write(Matrix[I][J], ' ');
  284. End;
  285. Writeln;
  286. End;
  287.  
  288. MatrixReadConsole := Matrix;
  289. End;
  290.  
  291. Function InputFromConsole() : TArray; //алгос для считывания с консоли
  292.  
  293. Var
  294. SizeI, SizeJ, MaxSum : Integer;
  295. Matrix : TArray;
  296.  
  297. Begin
  298. SizeI := SizeRowConsole();
  299. SizeJ := SizeColumnConsole();
  300. SetLength(Matrix, SizeI, SizeJ);
  301. Matrix := MatrixReadConsole(SizeI, SizeJ, Matrix);
  302.  
  303. InputFromConsole := Matrix;
  304. End;
  305.  
  306. Function SourceChoice() : TArray; //выбор откуда считывать. файл или консоль
  307.  
  308. Var
  309. ChoiceNumber : Integer;
  310. IsCorrect : Boolean;
  311. Matrix : TArray;
  312.  
  313. Begin
  314. Writeln('Выберите, откуда будут вводиться данные:');
  315. Repeat
  316. IsCorrect := True;
  317. Writeln('Введите 0, если с консоли; введите 1, если с файла.');
  318. Try
  319. Readln(ChoiceNumber);
  320. Except
  321. IsCorrect := False;
  322. End;
  323. If ((IsCorrect = False) Or ((ChoiceNumber <> 1) And (ChoiceNumber <> 0))) Then
  324. Begin
  325. Writeln('Неверный ввод данных!');
  326. IsCorrect := False;
  327. End;
  328. Until IsCorrect;
  329. If (ChoiceNumber = 0) Then
  330. Matrix := InputFromConsole()
  331. Else
  332. Matrix := InputFromFile();
  333.  
  334. SourceChoice := Matrix;
  335. End;
  336.  
  337.  
  338. Var //сам мейн
  339. MaxRes : Integer;
  340. Matrix : TArray;
  341.  
  342. Begin
  343. OutputTaskEssence(); //это выводит суть задания
  344. Matrix := SourceChoice(); // это считывание матрицы
  345. MaxRes := MatrixCount(Matrix); // это рассчеты
  346. Output(MaxRes); //это вывод результата
  347. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement