Пользователь
Регистрация: 14.11.2016
Сообщений: 12
|
Delphi 7 Не выводится значение в таблицу
Доброго времени суток.
Задача: написать программу, которая включает в себя табулирование функции и численное интегрирование с выводом графика функции и результатов в таблицу.
Проблема: при нажатии кнопки "Выполнить" таблица остается пуста и графика тоже нет.
Подскажите, как сделать так, чтобы полученные значения выводились в таблицу и строился график?
Спасибо.
Код:
unit RGR;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, TeeProcs, TeEngine, Chart, Grids, Series,
TeeFunci;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Edit11: TEdit;
StringGrid1: TStringGrid;
Chart1: TChart;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Edit1Change(Sender: TObject);
procedure Edit2Change(Sender: TObject);
procedure Edit3Change(Sender: TObject);
procedure Edit4Change(Sender: TObject);
procedure Edit5Change(Sender: TObject);
procedure Edit6Change(Sender: TObject);
procedure Edit7Change(Sender: TObject);
procedure Edit8Change(Sender: TObject);
procedure Edit9Change(Sender: TObject);
procedure Edit10Change(Sender: TObject);
procedure Edit11Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var N:integer;
const Nmax = 20;
type
Tmy = Array[1..Nmax, 1..Nmax] of Extended;
Tmx = Array[1..Nmax] of Extended;
var
Ax,Mx: Tmx;
My: Tmy;
Xn,Dx,B,C,D,Eps,An, Ak, Da: Extended;
J,K,Km,Err:Integer;
sA: string;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Text:=''; Edit2.Text:='';
Edit3.Text:=''; Edit4.Text:='';
Edit5.Text:='';Edit6.Text:='';
Edit7.Clear;Edit8.Clear;Edit9.Clear;
Edit10.Clear; Edit1.SetFocus;
end;
procedure FreeStringGrid1; // очистка ячеек StringGrit1
var
I, J: integer;
begin
for I:=0 to 20 do
begin
for J:=1 to 20 do
begin
Form1.StringGrid1.Cells[I,J]:='';
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
// численное интегрирование
procedure ChisInt(C, D, Eps: Extended; var B: Extended; Km : integer; var Err, K :integer);
var i, j: integer;
Y1, Yn, S4, S2, h, Del, int1, x: extended;
function F(X: Extended): Extended;
begin
F:=sqr(x)*ln(x);
end;
begin
Y1:= F(C);
Yn:= F(D);
Int1:=0;
K:= 2;
Err:= 1;
J:=1;
while(J<=Km) do
begin
h:=(D - C)/k;
X:= C + H;
B:=0;
I:=1;
S4:=0;
S2:= 0;
end;
repeat
if ODD(I) then
S4:=S4 + F(x)
else
S2:= S2+F(x);
B:= 4*S4 + 2*S2;
x:= x + H;
I:= I + 1;
until (I >= K);
B:=(Y1 + YN + B)* H/3;
Del:= abs(Int1 - B);
If (Del < Eps) then
begin
Int1:= B;
K:= K*2
end
else
begin
J:= Km;
Err:= Err - 1;
end;
J:= J + 1;
end;
procedure Tab(B, Xn, Dx, An, Ak, Da: Extended; N: Integer; var Err: integer;
var Mx, Ax:Tmx; var My:Tmy); // табулирование функции
var
I,J: integer;
X, Y, A: Extended;
begin
I:= 1;
A:= An;
Err:= 1;
while(A <= Ak) do
begin
X:=Xn;
for J:= 1 to N do
begin
if X <> 0 then
begin
Y:= A*exp(-b*x)*(cos(0.5*x) - 3*sin(2*x))/(6*x);
My[J,I]:= Y
end
else
begin
Err:= Err - 1;
end;
Mx[I]:= X;
Inc(I);
X:= X + Dx;
end;
Ax[I]:= A;
A:= A + Da;
Inc(I);
end;
end;
procedure Error; // Процедура для вывода ошибок в таблице StringGrid1
var
I, J: integer;
begin
for J:=0 to N do
begin
for I:=0 to N do
begin
StringGrid1.Cells[J, I]:='Error';
end;
end;
end;
// Процедура вывода результата
procedure RezOut(var Mx, Ax: Tmx; var My: Tmy);
var
I,J:integer;
A: Tmx;
begin
for I:= 0 to N do
begin
StringGrid1.Cells[I,0]:=('A['+IntToStr(I)+']='+FloatToStr(A[I]));
Form1.Chart1.Series[0].Clear;
for J:=0 to K do
begin
if(StringGrid1.ColCount < J + 1) then
StringGrid1.ColCount:=StringGrid1.ColCount + 1;
StringGrid1.Cells[0,J]:=('X['+IntToStr(J)+']='+FloatToStr(Mx[J]));
Form1.Chart1.Series[0].AddXY(Mx[J],My[I,J]);
StringGrid1.Cells[I,J]:=FloatToStrF(My[I,J],ffGeneral,6,5);
end;
if(StringGrid1.RowCount < I) then
StringGrid1.RowCount:=StringGrid1.RowCount +1;
end;
end;
begin
Err:= 0;
// исходные данные для интегрирования
C:=StrToFloat(Edit2.Text);
D:=StrToFloat(Edit3.Text);
Km:=StrToInt(Edit5.Text);
// исходные данные для табулирования
Xn:= StrToFloat(Edit6.Text);
Dx:= StrToFloat(Edit8.Text);
N:= StrToInt(Edit7.Text);
// формирование заголовков таблицы
StringGrid1.Cells[0,0]:='N';
StringGrid1.Cells[1,0]:='A';
// Очистка ячеек StringGrid
FreeStringGrid1;
// вызов ПП ChisInt
ChisInt(C, D, Eps, B, Km, Err, K);
begin
If Err <> 0 then
Edit11.Text:='Error';
end;
// вызов ПП Tab
Tab(B, Xn, Dx, An, Ak, Da, N, Err, Mx, Ax, My);
Error();
K:= trunc((Ak - An)/Da +1);
RezOut(Mx, Ax, My);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
C:=StrToInt(Edit1.Text);
end;
procedure TForm1.Edit2Change(Sender: TObject);
begin
D:=StrToInt(Edit2.Text);
end;
procedure TForm1.Edit3Change(Sender: TObject);
begin
Km:=StrToInt(Edit3.Text);
end;
procedure TForm1.Edit4Change(Sender: TObject);
begin
Eps:=StrToFloat(Edit4.Text);
end;
procedure TForm1.Edit5Change(Sender: TObject);
begin
Xn:=StrToInt(Edit5.Text);
end;
procedure TForm1.Edit6Change(Sender: TObject);
begin
N:=StrToInt(Edit6.Text);
end;
procedure TForm1.Edit7Change(Sender: TObject);
begin
Dx:=StrToInt(Edit7.Text);
end;
procedure TForm1.Edit8Change(Sender: TObject);
begin
An:=StrToFloat(Edit8.Text);
end;
procedure TForm1.Edit9Change(Sender: TObject);
begin
Ak:=StrToFloat(Edit9.Text);
end;
procedure TForm1.Edit10Change(Sender: TObject);
begin
Da:=StrToFloat(Edit10.Text);
end;
procedure TForm1.Edit11Change(Sender: TObject);
begin
B:=StrToInt(Edit11.Text);
end;
end.
|