fatalryuu

Untitled

Oct 3rd, 2021
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.26 KB | None | 0 0
  1. Program laba2;
  2.  
  3. Uses
  4.     System.SysUtils, Math;
  5.  
  6. Type
  7.     TArr = Array Of Integer;
  8.  
  9. Const
  10.     MIN_NUMBER = 1;
  11.     MAX_NUMBER = 1000;
  12.     MIN_SOLUTION = 7;
  13.     MAX_NUMBER_OF_PRIMES = 168;
  14.     MAX_NUMBER_OF_MULTIPLICATIONS = 289;
  15.  
  16. Procedure OutputOfTaskInfo();
  17. Begin
  18.     Writeln('This program helps you to find all natural numbers not exceeding P [', MIN_NUMBER , ', ', MAX_NUMBER, '], ', #10#13, 'which can be represented as a product of two primes.');
  19. End;
  20.  
  21. Function InputNumber(): Integer;
  22. Var
  23.     Number: Integer;
  24.     IsCorrect: Boolean;
  25. Begin
  26.     Write('Enter P: ');
  27.     Repeat
  28.         IsCorrect := True;
  29.  
  30.         Try
  31.             Read(Number);
  32.         Except
  33.             Write('ERROR! Please enter a number: ');
  34.             IsCorrect := False;
  35.         End;
  36.  
  37.         If (IsCorrect And ((Number > MAX_NUMBER) Or (Number < MIN_NUMBER))) Then
  38.         Begin
  39.                 Write('ERROR! Please enter a number between ', MIN_NUMBER, ' and ', MAX_NUMBER, ' :');
  40.                 IsCorrect := False;
  41.         End
  42.         Else If (IsCorrect And (Number < MIN_SOLUTION)) Then
  43.         Begin
  44.                 Write('No solutions. Try to enter another P: ');
  45.                 IsCorrect := False;
  46.         End;
  47.  
  48.     Until IsCorrect;
  49.  
  50.     InputNumber := Number;
  51. End;
  52.  
  53. Function SortingOfArray(Const MaxNumber: Integer; Arr: TArr): TArr;
  54. Var
  55.     I: Integer;
  56.     SortedArr: TArr;
  57. Begin
  58.     SetLength(SortedArr, MaxNumber);
  59.     For I := 0 To MaxNumber Do
  60.     Begin
  61.         SortedArr[I] := Arr[I];
  62.     End;
  63.  
  64.  
  65.     SortingOfArray := SortedArr;
  66. End;
  67.  
  68. Function FindingOfPrimes(Const P: Integer): TArr;
  69. Var
  70.     ArrOfPrimes: TArr;
  71.     SortedArrOfPrimes: TArr;
  72.     Rounded, J, I, LastNum, Num, NumberOfPrimes: Integer;
  73.     IsPrime: Boolean;
  74. Begin
  75.     J := 0;
  76.     SetLength(ArrOfPrimes, MAX_NUMBER_OF_PRIMES);
  77.     LastNum := P Div 2;
  78.     For Num := 2 To LastNum Do
  79.     Begin
  80.         IsPrime := True;
  81.         Rounded := Floor(Sqrt(Num));
  82.         For I := 2 To Rounded Do
  83.             If (Num Mod I = 0) Then
  84.                 IsPrime := False;
  85.  
  86.         If (IsPrime) Then
  87.         Begin
  88.             ArrOfPrimes[J] := Num;
  89.             Inc(J);
  90.         End;
  91.  
  92.     End;
  93.  
  94.     NumberOfPrimes := J;
  95.  
  96.     FindingOfPrimes := SortingOfArray(NumberOfPrimes, ArrOfPrimes);
  97.  
  98. End;
  99.  
  100. Function SortedArrayOfMultiplications(Const P: Integer; Const SortedArrOfPrimes: TArr): TArr;
  101. Var
  102.     K, J, I, Res, LastMult, NumberOfMult, LastNumberOfPrimes: Integer;
  103.     ArrOfMultiplications: TArr;
  104.     SortedArrOfMultiplications: TArr;
  105. Begin
  106.     K := 0;
  107.     LastMult := P + 1;
  108.     LastNumberOfPrimes := Length(SortedArrOfPrimes) - 1;
  109.  
  110.     For I := 0 To Length(SortedArrOfPrimes) Do
  111.     Begin
  112.         J := I;
  113.         Res := 0;
  114.         SetLength(ArrOfMultiplications, MAX_NUMBER_OF_MULTIPLICATIONS);
  115.  
  116.         While (J < LastNumberOfPrimes) Do
  117.         Begin
  118.             Res := SortedArrOfPrimes[I] * SortedArrOfPrimes[J + 1];
  119.             If (Res < LastMult) Then
  120.             Begin
  121.                 ArrOfMultiplications[K] := Res;
  122.                 Inc(J);
  123.                 Inc(K);
  124.             End
  125.  
  126.             Else
  127.                 Inc(J);
  128.         End;
  129.     End;
  130.  
  131.     NumberOfMult := K;
  132.  
  133.     SortedArrayOfMultiplications := SortingOfArray(NumberOfMult, ArrOfMultiplications);
  134.  
  135. End;
  136.  
  137. Function BubbleSort(Arr: TArr): TArr;
  138. Var
  139.     IsSorted: Boolean;
  140.     LastElem, Buf, I: Integer;
  141. Begin
  142.     LastElem := Length(Arr) - 2;
  143.  
  144.     Repeat
  145.         IsSorted := True;
  146.         For I := 0 To LastElem Do
  147.             If (Arr[I] > Arr[I + 1]) Then
  148.             Begin
  149.                 IsSorted := False;
  150.                 Buf := Arr[I];
  151.                 Arr[I] := Arr[I + 1];
  152.                 Arr[I + 1] := Buf;
  153.             End;
  154.  
  155.     Until IsSorted;
  156.  
  157.  
  158.     BubbleSort := SortingOfArray(I ,Arr);
  159.  
  160. End;
  161.  
  162. Procedure OutputOfArrayOfMultiplications(Const BubbleSortedArray: TArr);
  163. Var
  164.     I: Integer;
  165. Begin
  166.     Write('Multiplied primes => ');
  167.     For I := 0 To Length(BubbleSortedArray) Do
  168.         Write(BubbleSortedArray[I], ' ');
  169. End;
  170.  
  171. Procedure Main();
  172. Var
  173.     P: Integer;
  174. Begin
  175.     OutputOfTaskInfo();
  176.     P := InputNumber();
  177.     OutputOfArrayOfMultiplications(BubbleSort(SortedArrayOfMultiplications(P, FindingOfPrimes(P))));
  178. End;
  179.  
  180. Begin
  181.     Main();
  182.     Readln;
  183.     Readln;
  184. End.
Advertisement
Add Comment
Please, Sign In to add comment