Advertisement
ksyshshot

Lab_2.2

Oct 30th, 2022 (edited)
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.39 KB | Source Code | 0 0
  1. Program Lab_2_2;
  2.  
  3. {$APPTYPE CONSOLE}
  4. {$R *.res}
  5.  
  6. Uses
  7.     System.SysUtils;
  8.  
  9. Type
  10.     TArr = Array Of Integer;
  11.  
  12. Var
  13.     ArrayOfCorrect: TArr;
  14.     N: ShortInt;
  15.  
  16. Function InputNumber(): Integer;
  17. Const
  18.     MAX_NUMBER = 2147483647;
  19.     MIN_NUMBER = 2;
  20. Var
  21.     Number: Integer;
  22.     IsCorrect: Boolean;
  23. Begin
  24.     Repeat
  25.         Writeln ('Введите натуральное число N в диапазоне от ', MIN_NUMBER,' до ', MAX_NUMBER);
  26.         IsCorrect := True;
  27.         Try
  28.             Readln (Number);
  29.         Except
  30.             Writeln ('Данные введены некорректно');
  31.             IsCorrect := False;
  32.         End;
  33.         If ((IsCorrect) And ((Number < MIN_NUMBER) Or (Number > MAX_NUMBER))) Then
  34.         Begin
  35.             Writeln ('Введено число неверного диапазона');
  36.             IsCorrect := False;
  37.         End
  38.     Until (IsCorrect);
  39.     InputNumber := Number;
  40. End;
  41.  
  42. Function ConsistencyUpToNumber(Number: Integer): TArr;
  43. Var
  44.     I: Integer;
  45.     ArrNumbers: TArr;
  46. Begin
  47.     SetLength (ArrNumbers, Number - 1);
  48.     I := 0;
  49.     While (I < Number - 1) Do
  50.     Begin
  51.         ArrNumbers[I] := I + 2;
  52.         Inc(I);
  53.     End;
  54.     ConsistencyUpToNumber := ArrNumbers;
  55. End;
  56.  
  57. Function ArrayOfPrime(Number: Integer): TArr;
  58. Var
  59.     IsPrime: Array Of Boolean;
  60.     I, J: Integer;
  61.     PrimeNumbers: TArr;
  62. Begin
  63.     SetLength(IsPrime, Number);
  64.     For I := 0 To Number - 1 Do
  65.         IsPrime[I] := True;
  66.     I := 2;
  67.     While (I * I < Number) Do
  68.     Begin
  69.         If (IsPrime[I]) Then
  70.         Begin
  71.             J := 2 * I;
  72.             While (J < Number) Do
  73.             Begin
  74.                 IsPrime[J] := False;
  75.                 J := J + I;
  76.             End;
  77.         End;
  78.         Inc (I);
  79.     End;
  80.     Dec(Number);
  81.     SetLength(PrimeNumbers, Number);
  82.     J := 0;
  83.     For I := 2 To Number Do
  84.         If (IsPrime[I]) Then
  85.         Begin
  86.             PrimeNumbers[J] := I;
  87.             Inc (J);
  88.         End;
  89.     ArrayOfPrime := PrimeNumbers;
  90. End;
  91.  
  92. Function SecondDivision(ArrNumbersElement, Quotient, Number: Integer): Integer;
  93. Var
  94.     ArrCorrectnessElement, K: Integer;
  95.     ArrOfPrime: TArr;
  96. Begin
  97.     ArrOfPrime := ArrayOfPrime(Number);
  98.     K := 0;
  99.     While ((K < 18) And (ArrOfPrime[K] <= Quotient)) Do
  100.     Begin
  101.         If (Quotient = ArrOfPrime[K]) Then
  102.         Begin
  103.             ArrCorrectnessElement := ArrNumbersElement;
  104.             K := 18;
  105.         End;
  106.         Inc (K);
  107.     End;
  108.     SecondDivision := ArrCorrectnessElement;
  109. End;
  110.  
  111. Function FindingRequiredNumbers(Number: Integer): TArr;
  112. Var
  113.     I, K, Quotient: Integer;
  114.     ArrCorrectness, ArrNumbers, ArrOfPrime: TArr;
  115. Begin
  116.     ArrOfPrime := ArrayOfPrime(Number);
  117.     ArrNumbers := ConsistencyUpToNumber(Number);
  118.     Dec(Number);
  119.     SetLength (ArrCorrectness, Number);
  120.     Dec(Number);
  121.     For I := 0 To Number Do
  122.     Begin
  123.         K := 0;
  124.         While ((K < 18) And (ArrOfPrime[K] < ArrNumbers[I])) Do
  125.         Begin
  126.             If (ArrNumbers[I] Mod ArrOfPrime[K] = 0) Then
  127.             Begin
  128.                 Quotient := ArrNumbers[I] Div ArrOfPrime[K];
  129.                 ArrCorrectness[I] := SecondDivision(ArrNumbers[I], Quotient, Number);
  130.                 K := 18;
  131.             End;
  132.             Inc (K);
  133.         End;
  134.     End;
  135.     FindingRequiredNumbers := ArrCorrectness;
  136. End;
  137.  
  138. Procedure NumberOutput(Number: Integer; ArrCorrect: TArr);
  139. Var
  140.     ZeroValue, I: Integer;
  141. Begin
  142.     Writeln ('Полученные натуральные числа:');
  143.     Dec(Number);
  144.     ZeroValue := Number;
  145.     For I := 0 To Number Do
  146.         If (ArrCorrect[I] <> 0) Then
  147.         Begin
  148.             Write (ArrCorrect[I], ' ');
  149.             Dec(ZeroValue);
  150.         End;
  151.     If (ZeroValue = Number) Then
  152.         Write ('Натуральные числа, соответствующие требованиям, не найдены');
  153. End;
  154.  
  155. Procedure WriteTask ();
  156. Begin
  157.     Writeln ('Данная программа находит все натуральные числа, которые можно представить в виде произведения двух простых чисел и которые не превосходят введённое натуральное число N');
  158. End;
  159.  
  160. Begin
  161.     WriteTask;
  162.     N := InputNumber;
  163.     ArrayOfCorrect := FindingRequiredNumbers(N);
  164.     NumberOutput(N, ArrayOfCorrect);
  165.     Readln;
  166. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement