Advertisement
dxvmxnd

Untitled

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