unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, funcii, RABOTY, Grids, XPMan; type TForm1 = class(TForm) RadioGroup1: TRadioGroup; Label1: TLabel; ComboBox1: TComboBox; GroupBox1: TGroupBox; CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; CheckBox4: TCheckBox; Button1: TButton; Button2: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label2: TLabel; Label3: TLabel; Label4: TLabel; StringGrid1: TStringGrid; Label5: TLabel; XPManifest1: TXPManifest; procedure StringGrid1DblClick(Sender: TObject); procedure RadioGroup1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; FuncX:TFuncX; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin for i:=0 to high(ArrNameFuncX) do Form1.ComboBox1.AddItem(ArrNameFuncX[i],Sender); ComboBox1.ItemIndex:=0; FuncX:=ArrFuncX[0]; ComboBox1.SelText:=ArrNameFuncX[0]; end; procedure myTabFunc(const Rabota:string; ArrFX:tArrFX); var i:integer; begin Form1.StringGrid1.Width:=Form1.StringGrid1.Width+60; Form1.Width:=Form1.Width+70; form1.StringGrid1.ColCount:=form1.StringGrid1.ColCount+1; form1.StringGrid1.Cells[form1.StringGrid1.ColCount-1,0]:=Rabota; for i:=0 to StrToInt(Form1.Edit3.Text) do begin Form1.StringGrid1.Cells[Form1.StringGrid1.ColCount-1,i+1] :=FloatToStr(ArrFX[i]); end; end; procedure TForm1.Button1Click(Sender: TObject); var ArrFX:tArrFX; i,N:integer; a,b,hx:extended; begin //Выполнение работ для выбранной функции //и сделанных установок флагов и радиокнопок //начало интервалв значений аргумента a:=StrToFloat(Edit1.Text); //конец интервалв значений аргумента b:=StrToFloat(Edit2.Text); //количество подынтервалов аргумента N:=StrToInt(Edit3.Text); StringGrid1.Width:=145; hx:=(b-a)/(N);//шаг изменения аргумента if Form1.RadioGroup1.Buttons[0].Checked then begin //ФУНКЦИИ //заголовок над таблицей Form1.Label4.Caption:='ТАБЛИЦА ФУНКЦИЙ'; //начальная ширина окна для отображения таблицы Form1.Width:=300; //сначала в таблице один столбец Form1.StringGrid1.ColCount:=1; //заголовок столбца значений аргумента Form1.StringGrid1.Cells[0,0]:='X'; //начальная ширина окна для отображения таблицы //из одного столбца для значений аргумента Form1.StringGrid1.Width:=150; //в таблице всегда StrToInt(Form1.Edit3.Text)+2 строки //(причём нулевая - заголовочная) Form1.StringGrid1.RowCount:=N+2; //заполнение данными столбца Х for i:=1 to N+1 do Form1.StringGrid1.Cells[0,i]:=FloatToStr(a+(i-1)*hx); if Form1.CheckBox1.Checked then begin //будет вычислен ИНТЕГРАЛ Integtal(FuncX,a,b,N,ArrFX); // myTabFunc('Интеграл',ArrFX); end; if Form1.CheckBox2.Checked then begin //будет вычислена выбранная ФУНКЦИЯ FotX(FuncX,a,b,N,ArrFX); myTabFunc('F(X)',ArrFX); end; if Form1.CheckBox3.Checked then begin //будет вычислена ПЕРВАЯ ПРОИЗВОДНАЯ dF_dX(FuncX,a,b,N,ArrFX); myTabFunc('F''(X)',ArrFX); end; if Form1.CheckBox4.Checked then begin //будет вычислена ВТОРАЯ ПРОИЗВОДНАЯ d2F_dX2(FuncX,a,b,N,ArrFX); myTabFunc('F"(X)',ArrFX); end; end//ФУНКЦИИ - if Form1.RadioGroup1.Buttons[0].Checked else if Form1.RadioGroup1.Buttons[1].Checked then begin //КОРНИ //будут найдены приближения КОРНЕЙ Form1.Width:=460;//ширина формы // заголовок над таблицей Form1.Label4.Caption :='ТАБЛИЦА ПРИБЛИЖЕНИЙ КОРНЕЙ'; Form1.StringGrid1.ColCount:=4;//всегда 4 столбца //вначале только строка заголовков Form1.StringGrid1.RowCount:=1; //ширина окна отображения таблицы Form1.StringGrid1.Width:=300; //заголовки столбцов Form1.StringGrid1.Cells[0,0]:='Xпред'; Form1.StringGrid1.Cells[1,0]:='F(Xпред)'; Form1.StringGrid1.Cells[2,0]:='Xслед'; Form1.StringGrid1.Cells[3,0]:='F(Xслед)'; //поиск значений аргумента, предшествующих корням //уравнения и запись в массив ArrFX Korni(FuncX,a,b,N,ArrFX); //задать число строк таблицы Form1.StringGrid1.RowCount:=length(ArrFX)+1; //Заполнение столбцов таблицы по данным из массива ArrFX for i:=0 to high(ArrFX) do begin //значения аргумента перед корнем Form1.StringGrid1.Cells[0,i+1]:=FloatToStr(ArrFX[i]); //значения функции перед корнем Form1.StringGrid1.Cells[1,i+1] :=FloatToStr(FuncX(ArrFX[i])); //значения аргумента за корнем Form1.StringGrid1.Cells[2,i+1]:=FloatToStr(ArrFX[i]+hx); //значения функции за корнем Form1.StringGrid1.Cells[3,i+1] :=FloatToStr(FuncX(ArrFX[i]+hx)); end;//for i:=0 to high(ArrFX) end //КОРНИ else begin //ЭКСТРЕМУМЫ //будут найдены приближения ЭКСТРЕМУМОВ Form1.Width:=500;//ширина формы //заголовок над таблицей Form1.Label4.Caption :='ТАБЛИЦА ПРИБЛИЖЕНИЙ ЭКСТРЕМУМОВ'; Form1.StringGrid1.ColCount:=5;//всегда 5 столбцов //вначале только строка заголовков Form1.StringGrid1.RowCount:=1; //ширина окна отображения таблицы Form1.StringGrid1.Width:=340; //заголовки столбцов Form1.StringGrid1.Cells[0,0]:='Xпред'; Form1.StringGrid1.Cells[1,0]:='F(Xпред)'; Form1.StringGrid1.Cells[2,0]:='F(Xэкстр)'; Form1.StringGrid1.Cells[3,0]:='F(Xслед)'; Form1.StringGrid1.Cells[4,0]:='Xслед'; //поиск значений аргумента, предшествующих экстремумам //функции и запись в массив ArrFX Extremumy(FuncX,a,b,N,ArrFX); //задать число строк таблицы Form1.StringGrid1.RowCount:=length(ArrFX)+1; //заполнение столбцов таблицы по данным из массива ArrFX for i:=0 to high(ArrFX) do begin //значения аргумента перед экстремумом Form1.StringGrid1.Cells[0,i+1]:=FloatToStr(ArrFX[i]); //значения функции перед экстремумом Form1.StringGrid1.Cells[1,i+1] :=FloatToStr(FuncX(ArrFX[i])); //значения функции вблизи экстремума Form1.StringGrid1.Cells[2,i+1] :=FloatToStr(FuncX(ArrFX[i]+hx)); //значения функции за экстремумом Form1.StringGrid1.Cells[3,i+1] :=FloatToStr(FuncX(ArrFX[i]+2*hx)); //значения аргумента за экстремумом Form1.StringGrid1.Cells[4,i+1]:=FloatToStr(ArrFX[i]+2*hx); end;//for i:=0 to high(ArrFX) end;//if _ФУНКЦИИ_else if _КОРНИ_ else _ЭКСТРЕМУМЫ end;//procedure TForm1.Button1Click(Sender: TObject) procedure TForm1.ComboBox1Change(Sender: TObject); begin FuncX:=ArrFuncX[ComboBox1.itemindex] end; procedure TForm1.Button2Click(Sender: TObject); begin close end; procedure TForm1.RadioGroup1Click(Sender: TObject); begin case RadioGroup1.ItemIndex of 0: GroupBox1.Visible:=true; else GroupBox1.Visible:=false; end; end; procedure TForm1.StringGrid1DblClick(Sender: TObject); begin edit1.Text:=StringGrid1.Cells[0,StringGrid1.Row]; case RadioGroup1.ItemIndex of 0 : if StringGrid1.Row=StringGrid1.RowCount then edit2.Text:=StringGrid1.Cells[0,StringGrid1.Row]+'1' else edit2.Text:=StringGrid1.Cells[0,StringGrid1.Row+1]; 1 : edit2.Text:=StringGrid1.Cells[2,StringGrid1.Row]; 2 : edit2.Text:=StringGrid1.Cells[4,StringGrid1.Row]; end; end; end.