Advertisement
dxvmxnd

Untitled

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