unit LSum_of_divizor; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Label2: TLabel; Label3: TLabel; procedure Edit1KeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation procedure Summa_Del; var N: longword; {натуральное число N} D: longword; {делитель числа N} K: real; {остаток от целочисленного деления N на число D} S: longword; {сумма делителей числа N} begin N:=StrToInt(Form1.Edit1.Text); S:=1; for D:=2 to Trunc(Sqrt(N)) do begin K:=N mod D; if K=0 then S:=S+D+Trunc(N/D); end; if (Frac(Sqrt(N)) = 0) and (N > 1) then S := S - Trunc(Sqrt(N)); Form1.Label2.Caption := 'Сумма делителей числа ' + IntToStr(N) + ' равна ' + IntToStr(S); if S = 1 then Form1.Label3.Caption := IntToStr(N)+' - простое число' else if S < N then Form1.Label3.Caption := IntToStr(N)+' - несовершенное число' else if S > N then Form1.Label3.Caption := IntToStr(N)+' - сверхсовершенное число' else Form1.Label3.Caption := IntToStr(N)+' - совершенное число' ; end; {$R *.dfm} procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin case length(Edit1.Text) of 0: case Key of #8 : begin Label2.Caption := ''; Label3.Caption := ''; end; '1'..'9' : begin Label2.Caption := ''; Label3.Caption := ''; end; else Key := Chr(0); end; 1..9: case Key of #8 : begin Label2.Caption := ''; Label3.Caption := ''; end; '0'..'9' : begin Label2.Caption := ''; Label3.Caption := ''; end; #13 : Summa_Del; else Key := Chr(0); end; else case Key of #8 : begin Label2.Caption := ''; Label3.Caption := ''; end; #13 : Summa_Del; else Key := Chr(0); end; end; end; end.