⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 traitement.~pas

📁 The mathematic method K-Means with delphi, a smaal essay, with graphic representation....
💻 ~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 + -