Advertisement
dxvmxnd

Untitled

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