Advertisement
dxvmxnd

Untitled

Nov 21st, 2023
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.46 KB | None | 0 0
  1. Program Lab;
  2.  
  3. uses
  4. System.SysUtils;
  5.  
  6. Type
  7. TArray = Array of Array of Integer;
  8.  
  9. Procedure OutputAnswer(Arr : TArray);
  10. Var
  11. Path : String;
  12. I, J, K : Integer;
  13. IsCorrect : Boolean;
  14. TextF : TextFile;
  15.  
  16. Begin
  17.  
  18. Writeln('Треугольник Паскаля: ');
  19.  
  20. For I := 0 To High(Arr) Do
  21. Begin
  22. For K := (High(Arr) + 1 - I) Downto 0 Do
  23. Write(' ');
  24. For J := 0 To High(Arr[I]) Do
  25. Begin
  26. Write(Arr[I][J], ' ');
  27. End;
  28. Writeln;
  29. End;
  30.  
  31. Repeat
  32. IsCorrect := True;
  33. Writeln('Введите путь файла для вывода: ');
  34. Try
  35. Readln(Path);
  36. AssignFile(TextF, Path);
  37. Reset(TextF);
  38. Except
  39. IsCorrect := False;
  40. Writeln('Неверный путь файла!');
  41. End;
  42. Until IsCorrect;
  43.  
  44. Append(TextF);
  45. Writeln(TextF);
  46.  
  47. Writeln(TextF, 'Треугольник Паскаля: ');
  48.  
  49. For I := 0 To High(Arr) Do
  50. Begin
  51. For K := (High(Arr) + 1 - I) Downto 0 Do
  52. Write(TextF, ' ');
  53. For J := 0 To High(Arr[I]) Do
  54. Begin
  55. Write(TextF, Arr[I][J], ' ');
  56. End;
  57. Writeln(TextF);
  58. End;
  59.  
  60. CloseFIle(TextF);
  61.  
  62. Writeln('Данные записаны в файл.');
  63. Readln;
  64. End;
  65.  
  66. Function ArrayCount(Size : Integer) : TArray;
  67.  
  68. Var
  69. Arr : TArray;
  70. I, J, K : Integer;
  71.  
  72. Begin
  73. SetLength(Arr, Size);
  74. Dec(Size);
  75. For I := 0 To Size Do
  76. Begin
  77. SetLength(Arr[I], I + 1);
  78. Arr[I][0] := 1;
  79. Arr[I][I] := 1;
  80. End;
  81.  
  82. For I := 2 To Size Do
  83. Begin
  84. For J := 1 To (High(Arr[I]) - 1) Do
  85. Begin
  86. Arr[I][J] := Arr[I-1][J-1] + Arr[I-1][J];
  87. End;
  88.  
  89. End;
  90.  
  91. ArrayCount := Arr;
  92.  
  93. End;
  94.  
  95. Procedure OutputTask();
  96. Begin
  97. Writeln('Данная программа считает и выводит треугольник Паскаля.');
  98. End;
  99.  
  100. Function PathChoice() : String;
  101.  
  102. Var
  103. Path : String;
  104. TextF : TextFile;
  105. IsCorrect : Boolean;
  106.  
  107. Begin
  108. Repeat
  109. IsCorrect := True;
  110. Writeln('Введите путь файла: ');
  111. Try
  112. Readln(Path);
  113. AssignFile(TextF, Path);
  114. Reset(TextF);
  115. Except
  116. IsCorrect := False;
  117. End;
  118. 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
  119. Begin
  120. Writeln('Неверный путь файла!');
  121. IsCorrect := False;
  122. End;
  123.  
  124. Until IsCorrect;
  125. Writeln('Файл успешно открыт!');
  126. CloseFile(TextF);
  127.  
  128. PathChoice := Path;
  129. End;
  130.  
  131. Function InputSizeFromConsole() : Integer;
  132.  
  133. Var
  134. IsCorrect : Boolean;
  135. Size : Integer;
  136.  
  137. Begin
  138. Repeat
  139. Writeln('Введите количество строк треугольника Паскаля, необходимых для вывода: ');
  140. IsCorrect := True;
  141. Try
  142. Readln(Size);
  143. Except
  144. IsCorrect := False;
  145. End;
  146. If ((Not IsCorrect) Or (Size < 1)) Then
  147. Begin
  148. Writeln('Ошибка! Введите корректный размер.');
  149. IsCorrect := False;
  150. End;
  151.  
  152. Until IsCorrect;
  153.  
  154. InputSizeFromConsole := Size;
  155. End;
  156.  
  157. Function InputSizeFromFile(Path : String) : Integer;
  158. Var
  159. IsCorrect : Boolean;
  160. Size : Integer;
  161. InputFile : TextFile;
  162.  
  163. Begin
  164. AssignFile(InputFile, Path);
  165. Reset(InputFile);
  166.  
  167. IsCorrect := True;
  168. Try
  169. Read(InputFile, Size);
  170. Except
  171. IsCorrect := False;
  172. End;
  173. If ((Not IsCorrect) Or (Size < 1)) Then
  174. Begin
  175. Writeln('Ошибка! Введите корректный размер с консоли.');
  176. Size := InputSizeFromConsole();
  177. End;
  178.  
  179. CloseFIle(InputFile);
  180.  
  181. InputSizeFromFile := Size;
  182. End;
  183.  
  184. Function InputFromFile() : Integer;
  185.  
  186. Var
  187. Arr : TArray;
  188. Path : String;
  189. Size : Integer;
  190.  
  191. Begin
  192. Writeln('При вводе с файла учтите, что на ПЕРВОЙ строке должно быть записано количество строк, необходимых для вывода.');
  193.  
  194. Path := PathChoice();
  195. Size := InputSizeFromFIle(Path);
  196.  
  197. InputFromFile := Size;
  198. End;
  199.  
  200. Function SourceChoice() : Integer;
  201. Var
  202. ChoiceNumber : Integer;
  203. IsCorrect : Boolean;
  204. Size : Integer;
  205.  
  206. Begin
  207. Repeat
  208. IsCorrect := True;
  209. Writeln('Выберите, откуда будут вводиться данные. 0, если с консоли; 1, если с файла.');
  210. Try
  211. Readln(ChoiceNumber);
  212. Except
  213. IsCorrect := False;
  214. End;
  215. If ((Not IsCorrect) Or ((ChoiceNumber <> 0) And (ChoiceNumber <> 1 ))) Then
  216. Begin
  217. IsCorrect := False;
  218. Writeln('Некорректный ввод данных!');
  219. End;
  220. Until IsCorrect;
  221.  
  222. If (ChoiceNumber = 0) Then
  223. Size := InputSizeFromConsole()
  224. Else
  225. Size := InputFromFile();
  226.  
  227. SourceChoice := Size;
  228.  
  229. End;
  230.  
  231. Var
  232. Arr : TArray;
  233. Size : Integer;
  234.  
  235. Begin
  236. OutputTask();
  237. Size := SourceChoice();
  238. Arr := ArrayCount(Size);
  239. OutputAnswer(Arr);
  240. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement