Advertisement
green1ant

2_2 pre_prod

Oct 28th, 2018
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.34 KB | None | 0 0
  1. program Project2;
  2. {$APPTYPE CONSOLE}
  3. uses
  4.   SysUtils;
  5.  
  6. const
  7.    ErrorMessage = 'Error! P should be natural number from 1 to 2147483647';
  8. type
  9.    TArray = array of Integer;
  10.  
  11. procedure EnterP(var P : Integer);
  12. var
  13.    Input : string;
  14.    IsCorrect : Boolean;
  15. begin
  16.    IsCorrect := False;
  17.    repeat
  18.       try
  19.          Writeln('Enter P');
  20.          Readln(Input);
  21.          P := StrToInt(Input);
  22.          if P < 1 then
  23.             Writeln(ErrorMessage)
  24.          else
  25.             IsCorrect := True
  26.       except
  27.          Writeln(ErrorMessage);
  28.       end;
  29.    until IsCorrect;
  30. end;
  31.  
  32. function GetSumOfDividers(N : Integer) : Integer;
  33. var
  34.    i, Last, Sum: Integer;
  35. begin
  36.    Sum := 1;
  37.    Last := Trunc(Sqrt(N));
  38.    for i := 2 to Last do
  39.       if N mod i = 0 then
  40.          if i*i = N then
  41.             Sum := Sum + i
  42.          else
  43.             Sum := Sum + i + (N div i);
  44.    GetSumOfDividers := Sum;
  45. end;
  46.  
  47. function IsPerfect(N : Integer) : Boolean;
  48. begin
  49.    if GetSumOfDividers(N) = N then
  50.       IsPerfect := True
  51.    else
  52.       IsPerfect := False;
  53. end;
  54.  
  55. procedure Main;
  56. var
  57.    P, i, x : Integer;
  58. begin
  59.    EnterP(P);
  60.    i := 2;
  61.    Writeln('All ''perfect'' numbers to ', P, ':');
  62.    while i < P do
  63.    begin
  64.       if IsPerfect(i) then
  65.          Writeln(i);
  66.       Inc(i, 2);
  67.  
  68.    end;
  69.    Readln;
  70. end;
  71.  
  72. begin
  73.    Main;
  74. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement