Разработка программы-калькулятора на Delphi - Формирование подмножества натуральных чисел с заданными параметрами — страница 7

  • Просмотров 3688
  • Скачиваний 332
  • Размер файла 430
    Кб

TfrmKP.MmAntiExpresorClick(Sender: TOb- ject); var Antiexpressor: TAntiexpressor; beginAntiexpressor:=TAntiexpressor.Create(Self);Antiexpressor.Show; end; end. //Numerator unit dm001Unit; interface uses Windows, Messages, SysUtils, Variants, Classes,Graphics, Controls, Forms,Dialogs, ComCtrls, StdCtrls; type TfrmDM001 = class(TForm)edtNumDigit: TEdit;udNumDigit: TUpDown;lblNumDigit: TLabel;LblDiv: TLabel;edtlost: TEdit;Lbllost: TLabel;btnRun: TButton;mmResultList: TMemo;cbViewList: TCheckBox;lblResult: TLabel;edtResult: TEdit;btnHelp: TButton;mmInp: TMemo;procedure edtDivKeyPress(Sender: TObject; var Key: Char);procedure btnRunClick(Sender: TObject);procedure edtlostExit(Sender: TObject); procedure edtNumDigitChange(Sender: TObject); procedure btnHelpClick(Sender: TObject);

procedure btnExitClick(Sender: TObject); procedure mmInpExit(Sender: TObject); procedure mmInpKeyPress(Sender: TObject; var Key: Char); private { Private declarations } function power(const Base, Exponent: integer): integer;public{ Public declarations }end; var frmDM001: TfrmDM001; implementation uses HelpUnit; {$R *.dfm} function TfrmDM001.power(const Base, Exponent: inte- ger): integer; var i: integer; beginresult:=1;for i:=1 to Exponent do result:=result*Base;end; procedure TfrmDM001.edtDivKeyPress(Sender: TObject; var Key: Char); begin if not (Key in [‘0’..’9’, #8]) then begin Key:=#0; Beep; end;end; procedure TfrmDM001.edtNumDigitChange(Sender: TOb- ject); begin if (length(edtNumDigit.Text)>0) and(length(edtLost.Text)>0) thenbtnRun.Enabled:=true

else btnRun.Enabled:=false;end; procedure TfrmDM001.edtlostExit(Sender: TObject); var i:integer; begin if (length(edtLost.Text)>0) then begin For I:=1 to mmInp.Lines.Count-1 do begin if StrToInt(edtLost.Text)>=StrToInt(mmInp. Lines[i])then begin MessageDlg(‘Остаток должен быть меньшеделителя’, mtError, [mbOK], 0); edtLost.SetFocus; end; end; if StrToInt(edtLost.Text)>=StrToInt(mmInp. Lines[0])then begin MessageDlg(‘Остаток должен быть меньшеделителя’, mtError, [mbOK], 0); edtLost.SetFocus; end; end; 13 end; procedure TfrmDM001.btnRunClick(Sender: TObject); var nDigit, nLost: integer; nMin, nMax: integer; nCount: integer; Stl,Finl:integer; Dig: array of integer; I, Max, Min, J, NOK:

integer; P: Int64;Bul, mBul:Boolean; begin edtResult.Text:=IntToStr(0); mmResultList.Lines.Clear; nDigit:=StrToInt(edtNumDigit.Text); nLost:=StrToInt(edtLost.Text); if nDigit<=1 then begin nMin:=0; nMax:=9; end else begin nMin:=power(10, nDigit-1); nMax:=nMin*10-1; end; if nlost>= nMin then mBul:=true; For I:=1 to mmInp.Lines.Count-1 do beginif StrToInt(mmInp.Lines[I])> nMax then begin MessageDlg(‘Делитель должен быть меньшенаибольшего числа данной разрядности’, mtError, [mbOK], 0);end;end; NOK:=0; if mmInp.Lines.Count-1<=6 then begin Setlength(Dig,mmInp.Lines.Count); Dig[0]:=StrToInt(mmInp.Lines[0]); Min:=Dig[0]; Max:=Dig[0]; P:=Dig[0]; For I:=1 to mmInp.Lines.Count-1 do

beginDig[I]:=StrToInt(mmInp.Lines[I]);P:=P*Dig[I];if Dig[I]Max thenMax:=Dig[I]; end; For J:=Min downto 1 do begin if Min mod j=0 then beginBul:=true;For I:=0 to mmInp.Lines.Count-1 do begin if Dig[I] mod J<>0 then beginBul:=false;Break; end; end; if Bul then begin Break; end; end; end; J:=Max; While J<=P do begin Bul:=true;For I:=0 to mmInp.Lines.Count-1 do beginif J mod Dig[I]<>0 then beginBul:=false;Break;end;end; if Bul then begin NOK:=J; Break; end; J:=J+Max; end; end; If NOK > nMax then begin mmResultList.text:=’ ‘; end else begin if mBul then begin Stl:=nMin mod NOK; Finl:=nMax mod NOK; nMin:=nMin+NOK-Stl+nLost; nMax:=nMax-NOK+nlost-Finl; end else begin Stl:=nMin mod NOK; If Stl>nLost then nMin:=nMin+NOK-Stl+nLost else nMin:=nMin+NOK-Stl;

Finl:=nMax mod NOK; If Finl nCount:=(nMax-nMin+NOK) div NOK; edtResult.Text:=IntToStr(nCount); if cbViewList.Checked then begin try mmResultList.Lines.BeginUpdate; Screen.Cursor:=crAppStart; while nMin <= nMax do begin mmResultList.Lines.Append(IntToStr(nMin));nMin:=nMin+NOK;end; finally Screen.Cursor:=crDefault; mmResultList.Lines.EndUpdate; end; end; end; end; procedure TfrmDM001.btnHelpClick(Sender: TObject);begin ShowMessage(‘Эта программа определяет мощностьмножества с заданными параметрами’+ #13#10 + ‘Для этого введите разряд чисел, делители и остатокот деления и нажмите“Считать!”.’); end; procedure