Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.10 KB | None | 0 0
  1. program laboratornaya3_2;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. {$R *.res}
  6.  
  7. uses
  8. System.SysUtils;
  9. type
  10. TPrimeNumbers = array of Boolean;
  11. procedure InitArray(var PrimeNumbers: TPrimeNumbers; Size: Integer);
  12. var
  13. i: Integer;
  14.  
  15. begin
  16. SetLength(PrimeNumbers, Size);
  17. for i := 0 to High(PrimeNumbers) do
  18. PrimeNumbers[i] := True;
  19. end;
  20.  
  21. procedure RemoveDivisibleNumbers(var PrimeNumbers: TPrimeNumbers;
  22. Divisor: Integer);
  23. var
  24. i: Integer;
  25.  
  26. begin
  27. i := Divisor * 2 - 1;
  28. while(i <= High(PrimeNumbers)) do
  29. begin
  30. PrimeNumbers[i] := False;
  31. i := i + Divisor;
  32. end;
  33. end;
  34. procedure PutData(PrimeNumbers: TPrimeNumbers);
  35. var
  36. i: Integer;
  37.  
  38. begin
  39. i := 0;
  40. Write(2, ' ');
  41. while(i < High(PrimeNumbers)) do
  42. begin
  43. if PrimeNumbers[i] then
  44. Write(i + 1, ' ');
  45. i := i + 2;
  46. end;
  47. end;
  48. function FindingPrimeNumbers(Number: Integer): TPrimeNumbers;
  49. var
  50. i: Integer;
  51. PrimeNumbers: TPrimeNumbers;
  52.  
  53. begin
  54. InitArray(PrimeNumbers, Number);
  55. PrimeNumbers[0] := False;
  56. i := 3;
  57. while(i < High(PrimeNumbers) div 2 + 1) do
  58. begin
  59. if PrimeNumbers[i - 1] then
  60. RemoveDivisibleNumbers(PrimeNumbers, i);
  61. i := i + 2;
  62. end;
  63. FindingPrimeNumbers := PrimeNumbers;
  64. end;
  65.  
  66. procedure OutputToNewFile(Number: Integer);
  67. var
  68. FileName: String;
  69. Output: TextFile;
  70. PrimeNumbers: TPrimeNumbers;
  71. i: integer;
  72. begin
  73. Write('Введите имя для нового файла: ');
  74. Readln(FileName);
  75. AssignFile(Output, FileName);
  76. Rewrite(Output);
  77. Writeln(Output,'Все простые числа, не превосходящие числа ',Number,': ');
  78. PrimeNumbers := FindingPrimeNumbers(Number);
  79. begin
  80. i := 0;
  81. Write(Output, 2, ' ');
  82. while(i <= High(PrimeNumbers)) do
  83. begin
  84. if PrimeNumbers[i] then
  85. Write(Output, i + 1, ' ');
  86. i := i + 2;
  87. end;
  88. end;
  89. CloseFile(Output);
  90. Writeln('Ответ записан в файл ', FileName);
  91. end;
  92. procedure OutputToExistFile(FileName: String; Number: Integer);
  93. var
  94. Output: TextFile;
  95. PrimeNumbers: TPrimeNumbers;
  96. i: integer;
  97. begin
  98. AssignFile(Output, FileName);
  99. Rewrite(Output);
  100. Writeln(Output, 'Все простые числа, не превосходящие числа ',Number,': ');
  101. PrimeNumbers := FindingPrimeNumbers(Number);
  102. begin
  103. i := 0;
  104. Write(Output, 2, ' ');
  105. while(i <= High(PrimeNumbers)) do
  106. begin
  107. if PrimeNumbers[i] then
  108. Write(Output, i + 1, ' ');
  109. i := i + 2;
  110. end;
  111. end;
  112. CloseFile(Output);
  113. Writeln('Ответ записан в файл ', FileName);
  114. end;
  115. procedure ChekExistFile(Number: Integer);
  116. var
  117. FileName: String;
  118. Output: TextFile;
  119. IsCorrect: boolean;
  120. begin
  121. repeat
  122. Write('Введите имя существующего файла для записи: ');
  123. Readln(FileName);
  124. if FileExists(FileName) then
  125. begin
  126. IsCorrect:= True;
  127. OutputToExistFile(FileName, Number);
  128. end
  129. else
  130. begin
  131. Writeln('Вы ввели несуществующий файл. Попробуйте ещё раз!');
  132. IsCorrect:= False;
  133. end;
  134. until IsCorrect;
  135. end;
  136. procedure ChooseOutputFile(Number: Integer);
  137. var
  138. Sign: String;
  139. IsCorrect: boolean;
  140. begin
  141. repeat
  142. Write('Введите "1", чтобы выбрать существующий файл для записи, или "2", чтобы создать новый: ');
  143. begin
  144. Readln(Sign);
  145. IsCorrect:= True;
  146. if Sign = '1' then
  147. ChekExistFile(Number)
  148. else
  149. if Sign = '2' then
  150. OutputToNewFile(Number)
  151. else
  152. begin
  153. IsCorrect:= False;
  154. Writeln('Вы ввели неверное значение. Пожалуйста попробуйте ещё раз.');
  155. end;
  156. end;
  157. until IsCorrect;
  158. end;
  159. procedure InputFromeFile(FileName: String);
  160. var
  161. Input: TextFile;
  162. Number: Integer;
  163. PrimeNumbers: TPrimeNumbers;
  164. begin
  165. AssignFile(Input, FileName);
  166. Reset(Input);
  167. while not Eof(Input) do
  168. begin
  169. Read(Input, Number);
  170. Writeln('Ваше натуральное число: ',Number);
  171. end;
  172. CloseFile(Input);
  173. Write('Все простые числа, не превосходящие числа ',Number,': ');
  174. PutData(FindingPrimeNumbers(Number));
  175. Writeln('');
  176. ChooseOutputFile(Number);
  177. end;
  178. procedure ChekInputFromeFile();
  179. var
  180. FileName: String;
  181. Input:TextFile;
  182. IsCorrect: boolean;
  183. begin
  184. repeat
  185. Write('Введите имя вашего файла, с которого вы хотите ввести число: ');
  186. Readln(FileName);
  187. if FileExists(FileName) then
  188. //Можно вставить процедуру проверки на пустой файл.
  189. IsCorrect:= True
  190. else
  191. begin
  192. IsCorrect:= False;
  193. Writeln('Вы ввели неверное имя. Пожалуйста попробуйте ещё раз!');
  194. end;
  195. until IsCorrect;
  196. InputFromeFile(FileName);
  197. end;
  198. procedure InputFromeKonsole;
  199. var
  200. Number: Integer;
  201. PrimeNumbers: TPrimeNumbers;
  202. begin
  203. Write('Введите ваше натуральное число для нахождения всех простых чисел, не превосходящих его: ');
  204. Readln(Number);
  205. Write('Все простые числа, не превосходящие числа ',Number,': ');
  206. PutData(FindingPrimeNumbers(Number));
  207. end;
  208. procedure ChooseKonsoleOrFile;
  209. var
  210. Letter: String;
  211. IsCorrect: boolean;
  212. begin
  213. repeat
  214. Write('Пожалуйста, введите "Ф" , если хотеите ввести число из файла, или введите "К", если хотите ввести из консоли: ');
  215. begin
  216. Readln(Letter);
  217. IsCorrect:= True;
  218. if Letter = 'Ф' then
  219. ChekInputFromeFile
  220. else
  221. if Letter = 'К' then
  222. InputFromeKonsole
  223. else
  224. begin
  225. IsCorrect:= False;
  226. Writeln('Извините, вы можете ввести только Ф или К. Попробуйте еще раз!');
  227. end;
  228. end;
  229. until IsCorrect;
  230. end;
  231.  
  232. procedure Main;
  233. var
  234. PrimeNumbers: TPrimeNumbers;
  235. Number: Integer;
  236. begin
  237. Writeln('Эта программа находит все простые числа, не превосходящие данного натурального числа P.');
  238. ChooseKonsoleOrFile;
  239. Readln;
  240. end;
  241. begin
  242. Main;
  243. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement