📄 traitement.~pas
字号:
unit Traitement;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids, Db, DBTables, Menus, StdCtrls, ExtCtrls, DBCtrls,
ImgList, ComCtrls, ToolWin, Buttons, Math ;
type
TForm2 = class(TForm)
MainMenu1: TMainMenu;
Fichier1: TMenuItem;
Nouveau1: TMenuItem;
Ouvrir1: TMenuItem;
Enregistrer1: TMenuItem;
Quitter1: TMenuItem;
Traitement1: TMenuItem;
RepresentationGraphique1: TMenuItem;
Data: TTable;
DataSource1: TDataSource;
DBNavigator1: TDBNavigator;
Button1: TButton;
Button3: TButton;
StatusBar1: TStatusBar;
ToolBar1: TToolBar;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SumXY: TTable;
Centre: TTable;
DBGrid1: TDBGrid;
Vnbr: TTable;
Button2: TButton;
procedure Quitter1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ D閏larations priv閑s }
public
{ D閏larations publiques }
end;
var
Form2: TForm2;
k,TD:integer;
ischange:boolean;
implementation
uses Unit3, Unit4;
{$R *.DFM}
function Dist(x:real;y:real;cx:real;cy:real):real;
begin
Dist:=sqrt(sqr(x-cx)+sqr(y-cy));
end;
procedure TForm2.Quitter1Click(Sender: TObject);
begin
Close;
end;
procedure TForm2.Button3Click(Sender: TObject);
begin
Close;
end;
//**************************************centre**********************************//
Procedure Center;
var i:integer;
begin
Form2.Centre.First;
Form2.SumXY.First;
For i:=1 to k do
begin
if Form2.SumXY.Fields[3].Asfloat<>0 then
begin
Form2.Centre.Edit;
Form2.Centre.Fields[0].Asinteger:=i;
Form2.Centre.Fields[1].Asfloat:=Form2.SumXY.Fields[1].Asfloat/Form2.SumXY.Fields[3].Asfloat;
Form2.Centre.Fields[2].Asfloat:=Form2.SumXY.Fields[2].Asfloat/Form2.SumXY.Fields[3].Asfloat;
Form2.Centre.Fields[3].Asfloat:=Form2.Centre.Fields[3].Asfloat+1000*i;
Form2.Centre.Post;
Form2.SumXY.Next;
Form2.Centre.Next;
end;
end;
end;
//******************************************Somme******************************//
procedure SomXY;
var i,j:integer;
begin
Form2.SumXY.First;
For i:= 1 to k do
begin
Form2.SumXY.Edit;
Form2.SumXY.Fields[0].Asinteger:=i;
Form2.SumXY.Post;
Form2.SumXY.Next;
end;
Form2.SumXY.First;
Form2.Data.First;
For i:=1 to k do
begin
Form2.SumXY.Edit;
Form2.SumXY.Fields[1].Asfloat:=0;
Form2.SumXY.Post;
Form2.SumXY.Edit;
Form2.SumXY.Fields[2].Asfloat:=0;
Form2.SumXY.Post;
Form2.SumXY.Edit;
Form2.SumXY.Fields[3].Asfloat:=0;
Form2.SumXY.Post;
Form2.SumXY.Next;
end;
Form2.SumXY.First;
Form2.Data.First;
For i:= 1 to k do
begin
Form2.Data.First;
For j:=1 to TD do
begin
if Form2.SumXY.Fields[0].Asinteger=Form2.Data.Fields[0].Asinteger then
begin
Form2.SumXY.Edit;
Form2.SumXY.Fields[1].Asfloat:=Form2.SumXY.Fields[1].Asfloat+Form2.Data.Fields[1].Asfloat;
Form2.SumXY.Fields[2].Asfloat:=Form2.SumXY.Fields[2].Asfloat+Form2.Data.Fields[2].Asfloat;
Form2.SumXY.Fields[3].Asfloat:=Form2.SumXY.Fields[3].Asfloat+1;
Form2.SumXY.Post;
end;
Form2.Data.Next;
end;
Form2.SumXY.Next;
end;
Center;
end;
//*********************************************Calcul**********************************************//
Procedure Calcul;
var i,j:integer;
D:real;
begin
TD:= Form2.Data.RecordCount;
repeat
begin
ischange:=false;
Form2.SumXY.First;
Form2.Vnbr.First;
For i:=1 to k do
begin
Form2.Vnbr.Edit;
Form2.Vnbr.Fields[0].Asinteger:=Form2.SumXY.Fields[3].Asinteger;
Form2.Vnbr.Post;
Form2.SumXY.Next;
Form2.Vnbr.Next;
end;
SomXY;
Form2.Data.First;
Form2.Centre.First;
For i:=1 to TD do
begin
Form2.Centre.First;
For j:=1 to k do
begin
D:=Dist(Form2.Centre.Fields[1].AsFloat,Form2.Centre.Fields[2].AsFloat,
Form2.Data.Fields[1].Asfloat,Form2.Data.Fields[2].Asfloat);
if D<Form2.Data.Fields[3].Asfloat then
begin
Form2.Data.Edit;
Form2.Data.Fields[3].Asfloat:=D;
Form2.Data.Post;
Form2.Data.Edit;
Form2.Data.Fields[0].Asfloat:=Form2.Centre.Fields[0].AsFloat;
Form2.Data.Post;
end;
Form2.Centre.Next;
end;
Form2.Data.Next;
end;
Form2.SumXY.First;
Form2.Vnbr.First;
For i:=1 to k do
begin
if Form2.Vnbr.Fields[0].Asinteger<>Form2.SumXY.Fields[3].Asinteger then
begin
ischange:=true;
Form2.SumXY.Next;
Form2.Vnbr.Next;
end;
end;
end;
until ischange=false;
end;
procedure TForm2.Button1Click(Sender: TObject);
var
i:integer;
begin
k:=strtoint(Form3.Edit1.text);
TD:= Data.RecordCount;
ischange:=true;
Data.First;
For i:=1 to TD do
begin
Data.Edit;
Data.Fields[0].Clear;
Data.Next;
end;
Data.Next;
if K=0 then
begin
MessageDlg('STP Donnez le Nombre des Groupe!'
, mtInformation, [mbok], 0) ;
Form3.Show;
ischange:=False;
end;
if Data.RecordCount < k then
begin
MessageDlg('Le Nombre des Groupes est Sup閞ieur au Nombre des El閙ents'
, mtInformation, [mbok], 0);
Ischange:=False;
Centre.First;
For i:=1 to Centre.RecordCount do
begin
Centre.Delete;
Centre.Next;
end;
Data.First;
Centre.First;
For i:=1 to TD do
Begin
Data.Edit;
Data.Fields[0].AsInteger:= i;
Data.Post;
Data.Next;
end;
end ;
Data.First;
For i:=1 to TD do
begin
if i<k then
begin
Data.Edit;
Data.Fields[0].Asinteger:=i;
Data.Fields[3].Asfloat:=power(10,10);
Data.Post;
Data.Next;
end
else
begin
Data.Edit;
Data.Fields[0].Asinteger:=k;
Data.Fields[3].Asfloat:=power(10,10);
data.Post;
Data.Next;
end;
end;
calcul
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
Form4.Show;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -