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

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

SysUtils, Variants, Classes,Graphics, Controls, Forms,Dialogs, StdCtrls, ComCtrls; type TfrmSuperGorner = class(TForm)edtPower: TEdit;mmInp: TMemo;mmResult: TMemo;btnResult: TButton;lblPower: TLabel;lblInp: TLabel;lblResult: TLabel;btnHelp: TButton;btnPrint: TButton;edtTest: TEdit;lblTest: TLabel;udPower: TUpDown;procedure mmInpKeyPress(Sender: TObject; var Key: Char);procedure btnResultClick(Sender: TObject);procedure btnExitClick(Sender: TObject);procedure btnPrintClick(Sender: TObject);procedure btnHelpClick(Sender: TObject); private { Private declarations } public{ Public declarations }function NOD(a:integer;b:integer):integer;end; var frmSuperGorner: TfrmSuperGorner; implementation uses HelpUnit, CreateUnit, DM004Unit; {$R *.dfm} function

TfrmSuperGorner.NOD(a:integer;b:integer):i nteger; var T:integer; begin a:=ABS(a); b:=ABS(b); if a>b then begin T:=a; a:=b; b:=T; end; WHILE b mod a<>0 do begin T:=a; a:=b mod a; b:=T; end; result:=a;end;procedure TfrmSuperGorner.mmInpKeyPress(Sender: TObject; var Key: Char);begin if not (Key in [‘0’..’9’, #8,#13,#10,’-’]) then begin Key:=#0; Beep; end; end; procedure TfrmSuperGorner.btnResultClick(Sender: TO- bject); const K=11; var a:array[1..K] of real; x, i, n, L, j, p, T, R, M, s:integer; y, result:extended; Bol:boolean; begin mmResult.Lines.Clear; n:=StrToInt(edtPower.Text); n:=n+1; if n>mmInp.Lines.Count then begin MessageDlg(‘Введите ‘+IntToStr(n-mmInp.Lines.Count)+’ коэффицента(-ов)

уравнения’, mtError, [mbOK], 0); mmInp.SetFocus; end else begin try mmResult.Lines.BeginUpdate; Screen.Cursor:=crAppStart; if (length(mmInp.Lines[0])>0)and (StrToInt(mmInp.Lines[0])<>0)then beginfor i:=1 to n do a[i]:=StrToFloat(mmInp.Lines[i-1]);for T:=n downto 2 do if a[T]<>0 then break; y:=Abs(a[T]); if T<2 then begin mmResult.Lines.Append(‘0’+’ ‘+IntToStr(n-T)); end else begin if T else mmResult.Lines.Append(‘0’+’ ‘+IntToStr(n-T));p:=1;While (p<=ABS(a[1])) and (n>1) do begin if trunc(a[1]) mod p=0 then begini:=1;While (i<=y) and (n>1)do beginif (trunc(y) mod i=0)and ((i<>p) or(p=1)) then beginx:=-i;for L:=1 to 2 do beginresult:=a[1]; for j:=2 to n do beginresult:=

result*x/p;result:= result + a[j];end;{forj} if result=0 then beginR:=NOD(x,p);x:=x div R;M:=p div R;s:=1; if s=1 then beginif M>1 then mmResult.Lines.Append(IntTo Str(x)+’/’+IntToStr(M)) else mmResult.Lines. Append(IntToStr(x)); end else beginif M>1 then mmResult.Lines.Append(IntToStr(x)+’/’+IntToStr(M)+’else‘+IntToStr(s)) mmResult.Lines. Append(IntToStr(x)+’ ‘+IntToStr(s)); end ;end;x:=(-1)*x; end;{forl}end;{if}i:=i+1; end; end;{if} p:=p+1; end;{while} end; end else beginif length(mmInp.Lines[0])=0 then begin MessageDlg(‘Введите коэффицент старшейстепени’, mtError, [mbOK], 0); mmInp.SetFocus; end else begin MessageDlg(‘Коэффицент старшей

степенидолжен быть отличен от нуля’, mtError, [mbOK], 0); mmInp.SetFocus; end; end; finally mmResult.Lines.EndUpdate; Screen.Cursor:=crDefault; end;{finally} if length(mmResult.Lines[0])=0 then mmResult.Lines.Append(‘Íåò êîðíåé’);end;end; procedure TfrmSuperGorner.btnExitClick(Sender: TOb- ject); begin //frmSuperGorner.Close;((Sender as TButton).Owner as TForm).Close;end; procedure TfrmSuperGorner.btnPrintClick(Sender: TObject); var slText: TStringList; tStr: string; i:integer; begin slText:=TStringList.Create; try for i:=0 to mmResult.Lines.Count-1 do slText.Append(mmResult.Lines[i]); tStr:=TimeToStr(Time); tStr:=tStr+’ ‘+DateToStr(Date); slText.Append(tStr);

slText.SaveToFile(edtTest.Text); finally slText.Free; end; end; procedure TfrmSuperGorner.btnHelpClick(Sender: TObject); begin ShowMessage(‘Эта программа находит целочисленныерешения алгебраического уравнения, используя схемуГорнера’+ #13#10 + ‘Для этого введите степень уравнения и коэффиценты по убыванию степеней и нажмите “Считать”.’+ #13#10 + ‘Также можно сохранить результаты в отдельном файле с помощью кнопки “Печать”.’); end; end. //Expressor unit DM007Unit; interface uses Windows, Messages,