SHARE
TWEET

Untitled

a guest Nov 19th, 2019 86 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top