Advertisement
dxvmxnd

Untitled

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