Advertisement
dxvmxnd

Untitled

Nov 5th, 2023
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.41 KB | None | 0 0
  1. Program Lab;
  2.  
  3. uses
  4. System.SysUtils;
  5.  
  6. Type
  7. TArray = Array of Integer;
  8.  
  9.  
  10. Function ArrayCount(ArrA, ArrB, ArrC : TArray) : TArray;
  11. Var
  12. I, J, ArrCNumber : Integer;
  13. Repeating : Boolean;
  14.  
  15. Begin
  16. ArrCNumber := 0;
  17. SetLength(ArrC, 1);
  18. ArrC[0] := 0;
  19. For I := 0 To High(ArrA) Do
  20. Begin
  21. Repeating := False;
  22. For J := 0 To High(ArrC) Do
  23. Begin
  24. If (ArrA[I] = ArrC[J]) Then
  25. Begin
  26. Repeating := True;
  27. End
  28. End;
  29. If (Not Repeating) Then
  30. Begin
  31. Inc(ArrCNumber);
  32. SetLength(ArrC, ArrCNumber);
  33. ArrC[ArrCNumber-1] := ArrA[I];
  34. End;
  35. End;
  36.  
  37. For I := 0 To High(ArrB) Do
  38. Begin
  39. Repeating := False;
  40. For J := 0 To High(ArrC) Do
  41. Begin
  42. If (ArrB[I] = ArrC[J]) Then
  43. Begin
  44. Repeating := True;
  45. End
  46. End;
  47. If (Not Repeating) Then
  48. Begin
  49. Inc(ArrCNumber);
  50. SetLength(ArrC, ArrCNumber);
  51. ArrC[ArrCNumber-1] := ArrB[I];
  52. End;
  53. End;
  54.  
  55. ArrayCount := ArrC;
  56. End;
  57.  
  58.  
  59. Function SizeConsoleFirst() : Integer;
  60. Var
  61. IsCorrect : Boolean;
  62. Size : Integer;
  63. Begin
  64. Repeat
  65. IsCorrect := True;
  66. Writeln('Введите количество элементов в первом массиве');
  67. Try
  68. Readln(Size);
  69. Except
  70. IsCorrect := False;
  71. Writeln('Неверный тип данных');
  72. End;
  73. If (Size < 1) Then
  74. Begin
  75. IsCorrect := False;
  76. Writeln('Неверный тип данных');
  77. End;
  78. Until IsCorrect;
  79.  
  80. SizeConsoleFirst := Size;
  81. End;
  82.  
  83. Function SizeConsoleSecond() : Integer;
  84. Var
  85. IsCorrect : Boolean;
  86. Size : Integer;
  87. Begin
  88. Repeat
  89. IsCorrect := True;
  90. Writeln('Введите количество элементов во втором массиве');
  91. Try
  92. Readln(Size);
  93. Except
  94. IsCorrect := False;
  95. Writeln('Неверный тип данных');
  96. End;
  97. If (Size < 1) Then
  98. Begin
  99. IsCorrect := False;
  100. Writeln('Неверный тип данных');
  101. End;
  102. Until IsCorrect;
  103.  
  104. SizeConsoleSecond := Size;
  105. End;
  106.  
  107. Function ExceptionReadFirst(I : Integer) : Integer;
  108. Var
  109. Number : Integer;
  110. IsCorrect : Boolean;
  111. Begin
  112. Repeat
  113. IsCorrect := True;
  114. Writeln('Введите ', (I+1), ' элемент первого массива: ');
  115. Try
  116. Readln(Number);
  117. Except
  118. IsCorrect := False;
  119. Writeln('Неверный тип данных!');
  120. End;
  121. Until IsCorrect;
  122.  
  123. ExceptionReadFirst := Number;
  124. End;
  125.  
  126. Function ExceptionReadSecond(I : Integer) : Integer;
  127. Var
  128. Number : Integer;
  129. IsCorrect : Boolean;
  130. Begin
  131. Repeat
  132. IsCorrect := True;
  133. Writeln('Введите ', (I+1), ' элемент второго массива: ');
  134. Try
  135. Readln(Number);
  136. Except
  137. IsCorrect := False;
  138. Writeln('Неверный тип данных!');
  139. End;
  140. Until IsCorrect;
  141.  
  142. ExceptionReadSecond := Number;
  143. End;
  144.  
  145. Procedure TaskEssence();
  146. Begin
  147. Writeln('Данная программа считывает два массива и затем записывает их значения в третий упорядоченный массив (без повторений).');
  148. End;
  149.  
  150. Function PathChoice() : String;
  151. Var
  152. TFile : TextFile;
  153. Path : String;
  154. IsCorrect : Boolean;
  155.  
  156. Begin
  157. Repeat
  158. IsCorrect := True;
  159. Writeln('Введите путь файла: ');
  160. Try
  161. Readln(Path);
  162. AssignFile(TFile, Path);
  163. Reset(TFile);
  164. Except
  165. IsCorrect := False;
  166. Writeln('Неверный путь файла!');
  167. End;
  168. Until IsCorrect;
  169. Writeln('Файл успешно открыт!');
  170. PathChoice := Path;
  171. CloseFile(TFile);
  172. End;
  173.  
  174. Function SizeFileFirst(Path : String; var TFile : TextFile) : Integer;
  175. Var
  176. Size : Integer;
  177. IsCorrect : Boolean;
  178.  
  179. Begin
  180. AssignFile(TFile, Path);
  181. Reset(TFile);
  182. IsCorrect := True;
  183. Writeln('Запись количества элементов 1 массива...');
  184. Try
  185. Readln(TFile, Size);
  186. Except
  187. IsCorrect := False;
  188. End;
  189. If ((Size < 1) Or (IsCorrect = False)) Then
  190. Begin
  191. Writeln('Ошибка! Неверный ввод размера! Впишите данные с клавиатуры.');
  192. Size := SizeConsoleFirst();
  193. End;
  194.  
  195. Writeln('Количество элементов 1 массива: ', Size);
  196. CloseFile(TFile);
  197. SizeFileFirst := Size;
  198.  
  199. End;
  200.  
  201. Function SizeFileSecond(Path : String; var TFile : TextFile) : Integer;
  202. Var
  203. Size : Integer;
  204. IsCorrect : Boolean;
  205. Line : String;
  206.  
  207. Begin
  208. AssignFile(TFile, Path);
  209. Reset(TFile);
  210. IsCorrect := True;
  211. Readln(TFile, Line);
  212. Readln(TFile, Line);
  213.  
  214. Writeln('Запись количества элементов 2 массива...');
  215. Try
  216. Readln(TFile, Size);
  217. Except
  218. IsCorrect := False;
  219. End;
  220. If ((Size < 1) Or (IsCorrect = False)) Then
  221. Begin
  222. Writeln('Ошибка! Неверный ввод размера! Впишите данные с клавиатуры.');
  223. Size := SizeConsoleSecond();
  224. End;
  225.  
  226. Writeln('Количество элементов 2 массива: ', Size);
  227. CloseFile(TFile);
  228. SizeFileSecond := Size;
  229.  
  230. End;
  231.  
  232. Function ArrayReadFileFirst(Path : String; Size : Integer; var TFile : TextFile; Arr : TArray) : TArray;
  233. Var
  234. I : Integer;
  235. Line : String;
  236. IsCorrect : Boolean;
  237.  
  238. Begin
  239. AssignFile(TFile, Path);
  240. Reset(TFile);
  241. Dec(Size);
  242. IsCorrect := True;
  243. Readln(TFile, Line);
  244.  
  245. Writeln('Запись массива...');
  246. Writeln('Первый массив: ');
  247. For I := 0 To Size Do
  248. Begin
  249. Try
  250. Read(TFile, Arr[I])
  251. Except
  252. Writeln(' Неверный ввод данных! Введите данные с клавиатуры.');
  253. Arr[I] := ExceptionReadFirst(I);
  254. End;
  255. Write(Arr[I], ' ');
  256. End;
  257. Writeln;
  258. CloseFile(TFile);
  259.  
  260. ArrayReadFileFirst := Arr;
  261.  
  262. End;
  263.  
  264. Function ArrayReadFileSecond(Path : String; Size : Integer; var TFile : TextFile; Arr : TArray) : TArray;
  265. Var
  266. I : Integer;
  267. Line : String;
  268. IsCorrect : Boolean;
  269.  
  270. Begin
  271. AssignFile(TFile, Path);
  272. Reset(TFile);
  273. Dec(Size);
  274. IsCorrect := True;
  275. Readln(TFile, Line);
  276. Readln(TFile, Line);
  277. Readln(TFile, Line);
  278.  
  279. Writeln('Запись массива...');
  280. Writeln('Второй массив: ');
  281. For I := 0 To Size Do
  282. Begin
  283. Try
  284. Read(TFile, Arr[I])
  285. Except
  286. Writeln(' Неверный ввод данных! Введите данные с клавиатуры.');
  287. Arr[I] := ExceptionReadSecond(I);
  288. End;
  289. Write(Arr[I], ' ');
  290. End;
  291. Writeln;
  292. CloseFile(TFile);
  293.  
  294. ArrayReadFileSecond := Arr;
  295.  
  296. End;
  297.  
  298. Procedure Output(ArrC : TArray);
  299. Var
  300. TFile : TextFile;
  301. Path : String;
  302. IsCorrect : Boolean;
  303. I : Integer;
  304.  
  305. Begin
  306. Writeln;
  307. Writeln('Упорядоченный массив без повторяющихся чисел: ');
  308. For I := 0 To High(ArrC) Do
  309. Begin
  310. Write(ArrC[I], ' ');
  311. End;
  312.  
  313. Repeat
  314. IsCorrect := True;
  315. Writeln('Введите путь файла для вывода: ');
  316. Try
  317. Readln(Path);
  318. AssignFile(TFile, Path);
  319. Reset(TFile);
  320. Except
  321. IsCorrect := False;
  322. Writeln('Неверный путь файла!');
  323. End;
  324. Until IsCorrect;
  325. Append(TFile);
  326. Writeln(TFile);
  327. Writeln(TFile, 'Упорядоченный массив без повторяющихся чисел: ');
  328. For I := 0 To High(ArrC) Do
  329. Begin
  330. Write(TFIle, ArrC[I], ' ');
  331. End;
  332.  
  333. CloseFile(TFile);
  334. Writeln('Данные записаны в файл.');
  335. Readln;
  336.  
  337. End;
  338.  
  339. Function FromFile() : TArray;
  340.  
  341. Var
  342. Path : String;
  343. SizeFirst, SizeSecond : Integer;
  344. TFile : TextFile;
  345. ArrFirst, ArrSecond, ArrayC : TArray;
  346.  
  347. Begin
  348. Writeln('При записи данных из файла, учтите, что на первой строке написано количество элементов массива, а далее через пробел элементы массива; на 3 строке размер второго массива, на 4 элементы массива через пробел');
  349. Path := PathChoice();
  350. SizeFirst := SizeFileFirst(Path, TFile);
  351. SetLength(ArrFirst, SizeFirst);
  352. ArrFirst := ArrayReadFileFirst(Path, SizeFirst, TFile, ArrFirst);
  353.  
  354. SizeSecond := SizeFileSecond(Path, TFile);
  355. SetLength(ArrSecond, SizeSecond);
  356. ArrSecond := ArrayReadFileSecond(Path, SizeSecond, TFile, ArrSecond);
  357.  
  358. ArrayC := ArrayCount(ArrFirst, ArrSecond, ArrayC);
  359.  
  360. FromFile := ArrayC;
  361. End;
  362.  
  363. Function ArrayReadConsole(Size : Integer; Arr : TArray) : TArray;
  364. Var
  365. IsCorrect : Boolean;
  366. I, J : Integer;
  367. Begin
  368. Dec(Size);
  369.  
  370. For I := 0 To Size Do
  371. Begin
  372. Repeat
  373. IsCorrect := True;
  374. Writeln('Введите элемент с индексом ', I+1);
  375. Try
  376. Readln(Arr[I]);
  377. Except
  378. IsCorrect := False;
  379. Writeln('Неверный тип данных');
  380. End;
  381. Until IsCorrect;
  382. End;
  383.  
  384. ArrayReadConsole := Arr;
  385. End;
  386.  
  387. Function FromConsole() : TArray ;
  388.  
  389. Var
  390. SizeFirst, SizeSecond : Integer;
  391. ArrFirst, ArrSecond, ArrayC : TArray;
  392.  
  393. Begin
  394. SizeFirst := SizeConsoleFirst();
  395. SetLength(ArrFirst, SizeFirst);
  396. ArrFirst := ArrayReadConsole(SizeFirst, ArrFirst);
  397.  
  398. SizeSecond := SizeConsoleSecond();
  399. SetLength(ArrSecond, SizeSecond);
  400. ArrSecond := ArrayReadConsole(SizeSecond, ArrSecond);
  401.  
  402. ArrayC := ArrayCount(ArrFirst, ArrSecond, ArrayC);
  403.  
  404. FromConsole := ArrayC;
  405. End;
  406.  
  407. Function SourceChoice() : TArray;
  408. Var
  409. ChoiceNumber : Integer;
  410. Arr : TArray;
  411. IsCorrect : Boolean;
  412.  
  413. Begin
  414. Writeln('Выберите, откуда будут вводиться данные:');
  415. Repeat
  416. IsCorrect := True;
  417. Writeln('Введите 0, если с консоли; введите 1, если с файла.');
  418. Try
  419. Readln(ChoiceNumber);
  420. Except
  421. IsCorrect := False;
  422. End;
  423. If ((IsCorrect = False) Or ((ChoiceNumber <> 1) And (ChoiceNumber <> 0))) Then
  424. Begin
  425. Writeln('Неверный ввод данных!');
  426. IsCorrect := False;
  427. End;
  428. Until IsCorrect;
  429. If (ChoiceNumber = 0) Then
  430. Arr := FromConsole()
  431. Else
  432. Arr := FromFile();
  433.  
  434. SourceChoice := Arr;
  435.  
  436. End;
  437.  
  438. Var
  439. IsCorrect : Boolean;
  440. MaxRes : Integer;
  441. ArrayC : TArray;
  442.  
  443. Begin
  444. TaskEssence();
  445. ArrayC := SourceChoice();
  446. Output(ArrayC);
  447.  
  448. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement