Advertisement
THOMAS_SHELBY_18

Lab2_3(Delphi) Polina

Oct 30th, 2023
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.45 KB | None | 0 0
  1. Program Lab2_3;
  2.  
  3. Uses
  4. System.SysUtils;
  5.  
  6. Type
  7. TMatrix = Array of Array of Integer;
  8.  
  9. Const
  10. MIN_SIZE_MATRIX = 1;
  11. MAX_SIZE_MATRIX = 10;
  12. MIN_VALUE = -100;
  13. MAX_VALUE = 100;
  14.  
  15. Procedure PrintCondition();
  16. Begin
  17. Writeln('Найти наибольшую сумму модулей элементов строк заданной матрицы');
  18. End;
  19.  
  20. Function ReadNum(Min, Max: Integer): Integer;
  21. Var
  22. Num: Integer;
  23. IsCorrect: Boolean;
  24. Begin
  25. Repeat
  26. IsCorrect := True;
  27. Try
  28. Readln(Num);
  29. Except
  30. Write('Некорректный ввод! Введите значение еще раз: ');
  31. IsCorrect := False;
  32. End;
  33. If (IsCorrect) And ((Num < Min) Or (Num > Max)) Then
  34. Begin
  35. Write('Недопустимое значение! Введите значение еще раз: ');
  36. IsCorrect := False;
  37. End;
  38. Until (IsCorrect);
  39. ReadNum := Num;
  40. End;
  41.  
  42. Procedure InputMatrixFromConsole(Var Matrix: TMatrix; N, M: Integer);
  43. Var
  44. I, J, Buf: Integer;
  45. Begin
  46. SetLength(Matrix, N, M);
  47. For I := 0 to High(Matrix) Do
  48. For J := 0 to High(Matrix[0]) Do
  49. Begin
  50. Writeln('Введите элементы матрицы: ');
  51. Buf := ReadNum(MIN_VALUE, MAX_VALUE);
  52. Matrix[I, J] := Buf;
  53. End;
  54. End;
  55.  
  56. Function FindMaxSumOfRowElements(Matrix: TMatrix): Integer;
  57. Var
  58. MaxSum, Sum: Integer;
  59. I, J: Integer;
  60. Begin
  61. MaxSum := 0;
  62. For I := 0 To High(Matrix) Do
  63. Begin
  64. Sum := 0;
  65. For J := 0 to High(Matrix[0]) do
  66. Sum := Sum + Abs(Matrix[I, J]);
  67. If Sum > MaxSum Then
  68. MaxSum := Sum;
  69. End;
  70.  
  71. FindMaxSumOfRowElements := MaxSum;
  72. End;
  73.  
  74. Function ReadFile(Path: String; Var Matrix: TMatrix): Boolean;
  75. Var
  76. I, J, Buf, N, M: Integer;
  77. IsFileCorrect: Boolean;
  78. InputFile: TextFile;
  79.  
  80. Begin
  81. IsFileCorrect := True;
  82.  
  83. If FileExists(Path) Then
  84. Begin
  85. AssignFile(InputFile, Path);
  86. Try
  87. Reset(InputFile);
  88. Except
  89. Writeln('Не удалось открыть файл');
  90. IsFileCorrect := False;
  91. End;
  92.  
  93. If IsFileCorrect Then
  94. Begin
  95. Try
  96. Read(InputFile, N);
  97. Except
  98. Writeln('Количество строк введено некорректно!');
  99. IsFileCorrect := False;
  100. End;
  101.  
  102. If Not Eoln(InputFile) Or EoF(InputFile) Then
  103. Begin
  104. Writeln('В первой строке должно содержаться только количество строк, остальные данные должны находиться ниже!');
  105. IsFileCorrect := False;
  106. End;
  107.  
  108. If IsFileCorrect And (N < MIN_SIZE_MATRIX) Or (N > MAX_SIZE_MATRIX) Then
  109. Begin
  110. Writeln('Недопустимое количество строк!');
  111. IsFileCorrect := False;
  112. End;
  113.  
  114. If IsFileCorrect Then
  115. Begin
  116. Try
  117. Read(InputFile, M);
  118. Except
  119. Writeln('Количество столбцов введено некорректно!');
  120. IsFileCorrect := False;
  121. End;
  122.  
  123. If Not Eoln(InputFile) Or EoF(InputFile) Then
  124. Begin
  125. Writeln('Во второй строке должно содержаться только количество столбцов, остальные данные должны находиться ниже!');
  126. IsFileCorrect := False;
  127. End;
  128.  
  129. If IsFileCorrect And (M < MIN_SIZE_MATRIX) Or (M > MAX_SIZE_MATRIX) Then
  130. Begin
  131. Writeln('Недопустимое количество столбцов!');
  132. IsFileCorrect := False;
  133. End;
  134. End;
  135.  
  136. SetLength(Matrix, N, M);
  137. I := 0;
  138.  
  139. While (IsFileCorrect And (I < N)) Do
  140. Begin
  141. J := 0;
  142. While (IsFileCorrect And (J < M)) Do
  143. Begin
  144. Try
  145. Read(InputFile, Buf);
  146. Except
  147. Writeln('Элементы матрицы введены некорректно!');
  148. IsFileCorrect := False;
  149. End;
  150.  
  151. If IsFileCorrect And Eoln(InputFile) And Not (J = High(Matrix[I])) Then
  152. Begin
  153. Writeln('Все элементы матрицы должны быть записаны в виде матрицы');
  154. IsFileCorrect := False;
  155. End;
  156.  
  157. If IsFileCorrect And (Buf < MIN_VALUE) Or (Buf > MAX_VALUE) Then
  158. Begin
  159. Writeln('Элементы матрицы не входят в диапазон допустимых значений!');
  160. IsFileCorrect := False;
  161. End;
  162.  
  163. Matrix[I][J] := Buf;
  164. Inc(J);
  165. End;
  166.  
  167. If IsFileCorrect And (Not Eoln(InputFile) Or EoF(InputFile)) And Not (I = High(Matrix)) Then
  168. Begin
  169. Writeln('Все элементы матрицы должны быть записаны в виде матрицы');
  170. IsFileCorrect := False;
  171. End;
  172. Inc(I);
  173. End;
  174. End;
  175.  
  176. If IsFileCorrect And Not EoF(InputFile) Then
  177. Begin
  178. Writeln('Некорректный ввод матрицы!');
  179. IsFileCorrect := False;
  180. End;
  181.  
  182. CloseFile(InputFile);
  183. End
  184. Else
  185. Begin
  186. Writeln('Файла по данному пути не существует!');
  187. IsFileCorrect := False;
  188. End;
  189. ReadFile := IsFileCorrect;
  190. End;
  191.  
  192.  
  193. Procedure InputDataFromFile(Var Matrix: TMatrix);
  194. Var
  195. PathFile: String;
  196. IsInputFromFileSuccessfully: Boolean;
  197.  
  198. Begin
  199. Writeln('Данные в файле должны содержать:', #10, 'Натуральное число - количество строк ', #10, 'Натуральное число - количество столбцов ', MIN_SIZE_MATRIX, ' до ', MAX_SIZE_MATRIX, #10, 'Элементы матрицы, записанные в виде матрицы, допустимые значения для которых от ', MIN_VALUE, ' до ', MAX_VALUE);
  200. Repeat
  201. Write('Введите путь к файлу с его раширением: ');
  202. Readln(PathFile);
  203. IsInputFromFileSuccessfully := ReadFile(PathFile, Matrix);
  204. Until IsInputFromFileSuccessfully;
  205. End;
  206.  
  207. Procedure InputData(Var Matrix: TMatrix);
  208. Var
  209. Choice, N, M: Integer;
  210. Begin
  211. Writeln('Выберите вариант ввода:', #10#13, '1. Ввод из консоли', #10#13, '2. Ввод из файла');
  212. Choice := ReadNum(1,2);
  213.  
  214. If Choice = 1 Then
  215. Begin
  216. Writeln('Введите размер строк матрицы: ');
  217. N := ReadNum(MIN_SIZE_MATRIX, MAX_SIZE_MATRIX);
  218. Writeln('Введите размер столбцов матрицы: ');
  219. M := ReadNum(MIN_SIZE_MATRIX, MAX_SIZE_MATRIX);
  220. InputMatrixFromConsole(Matrix, N, M);
  221. End
  222. Else
  223. InputDataFromFile(Matrix);
  224.  
  225. End;
  226.  
  227. Procedure OutputDataToFile(Sum: Integer);
  228. Var
  229. IsPathCorrect: Boolean;
  230. Path: String;
  231. OutputFile: TextFile;
  232. Begin
  233. Writeln('Для вывода введите путь к файлу и его имя (например, F:\Projects\Matrix\Имя файла.txt). Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию)');
  234. Repeat
  235. IsPathCorrect := True;
  236. Write('Введите путь: ');
  237. Readln(Path);
  238. If Path = '' Then
  239. IsPathCorrect := False
  240. Else
  241. Begin
  242. AssignFile(OutputFile, Path);
  243. Try
  244. Rewrite(OutputFile);
  245. Except
  246. Writeln('Не удалось вывести в Файл');
  247. IsPathCorrect := False;
  248. End;
  249. End;
  250. Until IsPathCorrect;
  251. Writeln(OutputFile,'Наибольшая сумма модулей элементов строк матрицы:', Sum);
  252. CloseFile(OutputFile);
  253. Writeln('Вывод данных... успешно!');
  254. End;
  255.  
  256. Procedure OutputData(Sum: Integer);
  257. Var
  258. Choice: Integer;
  259. Begin
  260. Writeln('Выберите вариант вывода:', #10#13, '1. Вывод в консоль', #10#13, '2. Вывод в файл');
  261. Choice := ReadNum(1,2);
  262.  
  263. If Choice = 1 Then
  264. Writeln('Наибольшая сумма модулей элементов строк матрицы:', Sum)
  265. Else
  266. OutputDataToFile(Sum);
  267.  
  268. End;
  269.  
  270. Var
  271. Matrix: TMatrix;
  272. Sum: Integer;
  273. Begin
  274. PrintCondition();
  275. InputData(Matrix);
  276. Sum := FindMaxSumOfRowElements(Matrix);
  277. OutputData(Sum);
  278. Readln;
  279. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement