Advertisement
Vladislav8653

2.5

Mar 3rd, 2023
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.40 KB | None | 0 0
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.Menus;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Condition: TLabel;
  12.     Range: TLabel;
  13.     Button1: TButton;
  14.     Result: TLabel;
  15.     ProgressBar1: TProgressBar;
  16.     MainMenu1: TMainMenu;
  17.     PopupMenu1: TPopupMenu;
  18.     SaveDialog1: TSaveDialog;
  19.     N1: TMenuItem;
  20.     N2: TMenuItem;
  21.     N3: TMenuItem;
  22.     N4: TMenuItem;
  23.     procedure Button1Click(Sender: TObject);
  24.     procedure N4Click(Sender: TObject);
  25.     procedure N3Click(Sender: TObject);
  26.     procedure N2Click(Sender: TObject);
  27.   private
  28.     { Private declarations }
  29.   public
  30.     { Public declarations }
  31.   end;
  32.  
  33. Type
  34.     TArr = Array Of Integer;
  35.  
  36. var
  37.   Form1: TForm1;
  38.   Arr : TArr;
  39.   Save, Path : String;
  40.   IsFileOpen : Boolean;
  41.  
  42.  
  43. implementation
  44.  
  45. {$R *.dfm}
  46.  
  47. Function FindSumOfDivisors(Number : Integer) : Integer;
  48. Var
  49.     Sum : Integer;
  50.     Lim : Integer;
  51.     I : Integer;
  52. Begin
  53.     Sum := 0;
  54.     Lim := Number div 2;
  55.     For I := 1 to Lim do
  56.         If (Number mod I = 0) then
  57.             Sum := Sum + I;
  58.     FindSumOfDivisors := Sum;
  59. End;
  60.  
  61. procedure TForm1.Button1Click(Sender: TObject);
  62. Var
  63.     I, J, Proc, Counter : Integer;
  64.     Arr : TArr;
  65. Const
  66.     MAX : Integer = 100000;
  67. Begin
  68.     Button1.Visible := False;
  69.     ProgressBar1.Visible := True;
  70.     SetLength(Arr, MAX);
  71.     For I := 0 to High(Arr) do
  72.     Begin
  73.         Arr[I] := FindSumOfDivisors(I);
  74.         Proc := ((I * 100) div MAX - 1);
  75.         ProgressBar1.Position := Proc;
  76.         Application.ProcessMessages;
  77.     End;
  78.     Counter := 0;
  79.     For I := 0 to High(Arr) do
  80.     Begin
  81.         For J := I + 1 to High(Arr) do
  82.         Begin
  83.             If ((Arr[I] = J) and (Arr[J] = I)) then
  84.             Begin
  85.                 If Counter = 0 then
  86.                     Result.Caption := '    ' + Result.Caption + IntToStr(I) + ' и ' + IntToStr(J) + #13#10;
  87.                 If (Counter < 5) and (Counter <> 0) then
  88.                     Result.Caption := Result.Caption + '  ' + IntToStr(I) + ' и ' + IntToStr(J) + #13#10;
  89.                 If (Counter > 4) then
  90.                     Result.Caption := Result.Caption + IntToStr(I) + ' и ' + IntToStr(J) + #13#10;
  91.                 Inc(Counter);
  92.             End;
  93.         End;
  94.         Proc := ((I * 100) div MAX - 1);
  95.         ProgressBar1.Position := Proc;
  96.         Application.ProcessMessages;
  97.     End;
  98.     ProgressBar1.Position := 100;
  99.     Save := 'Все пары дружественных чисел до 100 000:' + #13#10 + Result.Caption;
  100.     N2.Enabled := True;
  101. End;
  102.  
  103. Function Open (): String;
  104. Begin
  105.     With Form1 Do
  106.     Begin
  107.         If SaveDialog1.Execute Then
  108.         Begin
  109.             Path := SaveDialog1.FileName;
  110.             IsFileOpen := True;
  111.         End
  112.         Else
  113.             IsFileOpen := False;
  114.     End;
  115.     Open := Path;
  116. End;
  117.  
  118. procedure TForm1.N2Click(Sender: TObject);
  119. Var
  120.     FileOutput: TextFile;
  121.     IsCorrect : Boolean;
  122. begin
  123.     IsCorrect := True;
  124.     Path := Open;
  125.     If (IsFileOpen) Then
  126.     Begin
  127.         try
  128.             AssignFile(FileOutput, Path);
  129.             Rewrite(FileOutput);
  130.             Write(FileOutput, Save);
  131.         except
  132.             IsCorrect := False;
  133.             Application.MessageBox('Запись в файл не удалась.', 'Ошибка', MB_ICONSTOP);
  134.         end;
  135.         if IsCorrect then
  136.         Begin
  137.             Application.MessageBox('Запись файла выполнена успешно.', 'Результат', 0);
  138.             CloseFile(FileOutput);
  139.         End;
  140.     End;
  141. end;
  142.  
  143. procedure TForm1.N3Click(Sender: TObject);
  144. begin
  145.      Application.MessageBox('Два числа называются дружественной парой, если они имеют одинаковую сумму всех своих делителей, которая равна сумме этих чисел.'#13#10'P.S. Для ускорения работы программы включите режим максимальной производительности и выключите энергосбережение (на ноубуке).', 'Инструкция', 0);
  146. end;
  147.  
  148. procedure TForm1.N4Click(Sender: TObject);
  149. begin
  150.      Application.MessageBox('Арефин Владислав гр.251004', 'Разрабочик', 0);
  151. end;
  152.  
  153. end.
  154.  
  155.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement