Advertisement
ksyshshot

Lab.2.2

Oct 26th, 2022
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.83 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 ShortInt;
  11.  
  12. Var
  13.     ArrayOfCorrect: TArr;
  14.     N: ShortInt;
  15.  
  16. Function InputNumber(): ShortInt;
  17. Const
  18.     MAX_NUMBER = 127;
  19.     MIN_NUMBER = 2;
  20. Var
  21.     Number: ShortInt;
  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: ShortInt): 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 SecondDivision(ArrNumbersElement: ShortInt; Quotient: Integer): ShortInt;
  58. Const
  59.     ArrOfPrime: Array[0..17] Of Integer = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61);
  60. Var
  61.     K, ArrCorrectnessElement: Integer;
  62. Begin
  63.     K := 0;
  64.     While ((K < 18) And (ArrOfPrime[K] <= Quotient)) Do
  65.     Begin
  66.         If (Quotient = ArrOfPrime[K]) Then
  67.         Begin
  68.             ArrCorrectnessElement := ArrNumbersElement;
  69.             K := 18;
  70.         End
  71.         Else
  72.         Begin
  73.             ArrCorrectnessElement := 0;
  74.             Inc (K);
  75.         End;
  76.     End;
  77.     SecondDivision := ArrCorrectnessElement;
  78. End;
  79.  
  80. Function FindingRequiredNumbers(Number: ShortInt): TArr;
  81. Const
  82.     ArrOfPrime: Array[0..17] Of Integer = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61);
  83. Var
  84.     I, K, Quotient: Integer;
  85.     ArrCorrectness: TArr;
  86.     ArrNumbers: TArr;
  87. Begin
  88.     ArrNumbers := ConsistencyUpToNumber(Number);
  89.     Dec(Number);
  90.     SetLength (ArrCorrectness, Number);
  91.     Dec(Number);
  92.     For I := 0 To Number Do
  93.     Begin
  94.         K := 0;
  95.         While ((K < 18) And (ArrOfPrime[K] < ArrNumbers[I])) Do
  96.         Begin
  97.             If (ArrNumbers[I] Mod ArrOfPrime[K] = 0) Then
  98.             Begin
  99.                 Quotient := ArrNumbers[I] Div ArrOfPrime[K];
  100.                 ArrCorrectness[I] := SecondDivision(ArrNumbers[I], Quotient);
  101.                 K := 18;
  102.             End;
  103.             Inc (K);
  104.         End;
  105.     End;
  106.     FindingRequiredNumbers := ArrCorrectness;
  107. End;
  108.  
  109. Procedure NumberOutput(Number: ShortInt; ArrCorrect: TArr);
  110. Var
  111.     ZeroValue, I: Integer;
  112. Begin
  113.     Writeln ('Полученные натуральные числа:');
  114.     Dec(Number);
  115.     ZeroValue := Number;
  116.     For I := 0 To Number Do
  117.         If (ArrCorrect[I] <> 0) Then
  118.         Begin
  119.             Write (ArrCorrect[I], ' ');
  120.             Dec(ZeroValue);
  121.         End;
  122.     If (ZeroValue = Number) Then
  123.         Write ('Натуральные числа, соответствующие требованиям, не найдены');
  124. End;
  125.  
  126. Procedure WriteTask ();
  127. Begin
  128.     Writeln ('Данная программа находит все натуральные числа, которые можно представить в виде произведения двух простых чисел и которые не превосходят введённое натуральное число N');
  129. End;
  130.  
  131. Begin
  132.     WriteTask;
  133.     N := InputNumber;
  134.     ArrayOfCorrect := FindingRequiredNumbers(N);
  135.     NumberOutput(N, ArrayOfCorrect);
  136.     Readln;
  137. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement