Advertisement
l3sha2001

Untitled

Oct 18th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.40 KB | None | 0 0
  1. program Lab2_2;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.    SysUtils;
  7.  
  8. type
  9.    TIntArray = array of Integer;
  10.    TBoolArray = array of Boolean;
  11.  
  12. function CheckInput(): Integer;
  13. var
  14.    P: Integer;
  15.    IsCorrectInput: Boolean;
  16. begin
  17.    IsCorrectInput := False;
  18.    repeat
  19.       try
  20.          Write('Please, enter P: ');
  21.          Readln(P);
  22.          if P < 2 then
  23.             Writeln('Invalid input! P must be natural number from 2 to ', High(Integer), '.')
  24.          else
  25.             IsCorrectInput := True;
  26.       except
  27.          Writeln('Invalid input! P must be natural number from 2 to ', High(Integer), '.');
  28.       end;
  29.    until IsCorrectInput;
  30.    CheckInput := P;
  31. end;
  32.  
  33.  
  34. function ProduceBoolArray(P: Integer): TBoolArray;
  35. var
  36.    i: Integer;
  37.    BoolArray: TBoolArray;
  38. begin
  39.    SetLength(BoolArray, P);
  40.    for i := 2 to P do
  41.       BoolArray[i] := False;
  42.    ProduceBoolArray := BoolArray;
  43. end;
  44.  
  45. function FindPrimeNumbers(BoolArray: TBoolArray; P: Integer; var PrimeAmount: Integer): TBoolArray;
  46. var
  47.    i, j: Integer;
  48. begin
  49.    PrimeAmount := 0;
  50.    for i := 2 to P do
  51.       if not BoolArray[i]  then
  52.       begin
  53.          j := i * 2;
  54.          Inc(PrimeAmount);
  55.          while (j <= P) do
  56.          begin
  57.             BoolArray[j] := True;
  58.             j := j + i;
  59.          end;
  60.       end;
  61.    FindPrimeNumbers := BoolArray;
  62. end;
  63.  
  64. function TransformBoolArray(BoolArray: TBoolArray; P, PrimeAmount: Integer): TIntArray;
  65. var
  66.    IntArray: TIntArray;
  67.    i, j: Integer;
  68. begin
  69.    j := 0;
  70.    SetLength(IntArray, PrimeAmount);
  71.    for i := 2 to P do
  72.    begin
  73.       if not BoolArray[i] then
  74.       begin
  75.          IntArray[j] := i;
  76.          Inc(j);
  77.       end;
  78.    end;
  79.    TransformBoolArray := IntArray;
  80. end;
  81.  
  82. procedure OutputArray(IntArray: TIntArray; PrimeAmount: Integer);
  83. var
  84.    i: Integer;
  85. begin
  86.    Dec(PrimeAmount);
  87.    for i := 0 to PrimeAmount do
  88.       Write(IntArray[i],' ');
  89. end;
  90.  
  91. procedure Main();
  92. var
  93.    P, PrimeAmount: Integer;
  94.    IntArray: TIntArray;
  95.    BoolArray: TBoolArray;
  96. begin
  97.    Writeln('This program shows all prime numbers from 2 to P.');
  98.    Writeln('The range of input data is [2 to ', High(Integer), '].');
  99.    P := CheckInput();
  100.    BoolArray := ProduceBoolArray(P);
  101.    BoolArray := FindPrimeNumbers(BoolArray, P, PrimeAmount);
  102.    IntArray := TransformBoolArray(BoolArray, P, PrimeAmount);
  103.    OutputArray(IntArray, PrimeAmount);
  104.    Readln;
  105. end;
  106.  
  107. begin
  108.    Main();
  109. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement