Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алексей.doc
Скачиваний:
14
Добавлен:
19.11.2019
Размер:
4.59 Mб
Скачать

Заключение

В результате выполнения расчетно-графического задания было разработано программное средство, позволяющее произвести анализ статистических данных.

Приложение выполнено на языке Object Pascal, в среде программирования Delphi 7.

Для приложения реализован кластерный анализ с использованием агломиративного (иерархического) метода .

Работоспособность программы проверена на тестовом наборе данных. Разработанное приложение выполняет все поставленные перед ним задачи, следовательно, можно сказать, что цель расчетно-графического задания выполнена.

Список используемых источников

1 Вендров А.М. Проектирование программного обеспечения экономических информационных систем: Учебник. – М.: Финансы и статистика, 2000. – 352 с.: ил.

2 Зубкова Т.М. Технология разработки программного обеспечения: Учебное пособие. – Оренбург: ГОУ ОГУ, 2004. – 101 с.

3 Delphi 7/Под общ. Ред. А.Д.хомоненко.-СПб.:БХВ-Петербург,2004.-1216с.:ил.

4 Кэнту М. Delphi 7 для профессионалов. – Спб.: Питер, 2005. – 670 с.

5 Смирнова Г. Н. и др. Проектирование экономических информационных систем: Учебник. – М.: Финансы и статистика, 2001. – 512 с.

6 Технология разработки программного обеспечения. Учебное пособие. / С. Орлов. – Спб.: Питер, 2003. – 480 с.

7 Унифицированный язык моделирования (UML - Unified Modeling Language) - http://www.rational.com.

8 Фаронов В.В. Delphi. Программирование на языке высокого уровня: Учебник для вузов — СПб.: Питер, 2004. – 640 с.: ил.

9 Конопка Р. Создание оригинальных компонент в среде Delphi/Пер. с англ. Рей Конопка. – К.: НИПФ «ДиаСофтЛтд», 1996.

Приложение а Листинг программы

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, StdCtrls, ComCtrls, Menus;

type

THackGrid = class(TStringGrid);

TForm1 = class(TForm)

StringGrid1: TStringGrid;

Button1: TButton;

Button2: TButton;

Button4: TButton;

Button5: TButton;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

Save1: TMenuItem;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

Button6: TButton;

UpDown1: TUpDown;

UpDown2: TUpDown;

Button7: TButton;

Label1: TLabel;

Label2: TLabel;

Memo1: TMemo;

Memo2: TMemo;

Memo3: TMemo;

Memo4: TMemo;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure Save1Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure UpDown1Click(Sender: TObject; Button: TUDBtnType);

procedure UpDown2Click(Sender: TObject; Button: TUDBtnType);

procedure Button6Click(Sender: TObject);

procedure Button7Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

mas:array[1..20,1..20] of Double;

z:array[1..20,1..20] of Double;

d:array[1..20,1..20] of Double;

sig:array[1..20] of Double;

mas_i:array[1..20] of Double;

n:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var i,j:integer;

begin

// производим нормировку в массиве

for i := 1 to StringGrid1.ColCount-1 do

for j:=1 to StringGrid1.RowCount-1 do

z[i,j]:=(mas[i,j]-mas_i[i])/sig[i];

// переносим все в таблицу

with StringGrid1 do

for i := 1 to ColCount-1 do

for j := 1 to RowCount-1 do

Cells[i,j]:= FloatToStr(z[i,j]);

ShowMessage('Нормировка выполнена');

Memo3.Visible:=true;

Button4.Visible:=true;

end;

procedure refre();

begin

Form1.Memo2.Visible:=false;

Form1.Button1.Visible:=false;

Form1.memo3.Visible:=false;

Form1.button4.Visible:=false;

Form1.memo4.Visible:=false;

Form1.button5.Visible:=false;

end;

procedure TForm1.Button2Click(Sender: TObject);

var i,j,k:integer;

sum:double;

begin

with StringGrid1 do

for i := 1 to ColCount-1 do

for j := 1 to RowCount-1 do

begin

if Cells[i,j]='' then

begin

ShowMessage('В поле ввода пусто.'#13#10'Введите число');

exit;

end;

end;

with StringGrid1 do

for i := 1 to ColCount-1 do

for j := 1 to RowCount-1 do

mas[i,j] :=StrToFloat(Cells[i,j]);

// вычисление Xi

for k:=1 to StringGrid1.ColCount-1 do

begin

sum:=0;

for i:=1 to StringGrid1.RowCount-1 do

sum:=sum+mas[k,i];

mas_i[k]:=sum/(StringGrid1.RowCount-1);

end;

// вычисление сигмы i

for j := 1 to StringGrid1.ColCount-1 do

begin

sum:=0;

for i:=1 to StringGrid1.RowCount-1 do

sum:=sum+(mas[j,i]-mas_i[j])*(mas[j,i]-mas_i[j]);

sig[j]:=Sqrt(sum/(StringGrid1.RowCount-1));

end;

ShowMessage('Вычисления произведены');

Memo2.Visible:=true;

Button1.Visible:=true;

end;

procedure TForm1.Button3Click(Sender: TObject);

var i,k:integer;

begin

end;

procedure TForm1.Button4Click(Sender: TObject);

var i,j,k:integer;

sum,a,b,c:double;

begin

for i:=1 to StringGrid1.RowCount-1 do

begin

for j:=1 to StringGrid1.RowCount-1 do

if (i=j) then d[i,j]:=0

else

begin

sum:=0;

for k:=1 to StringGrid1.ColCount-1 do

begin

a:=z[k,i];

b:=z[k,j];

sum:=sum+(a-b)*(a-b);

end;

d[i,j]:=Sqrt(sum);

end;

end;

// выводим получившиеся

StringGrid1.ColCount:=StringGrid1.RowCount;

StringGrid1.Refresh;

with StringGrid1 do

for i := 1 to ColCount-1 do

for j := 1 to RowCount-1 do

Cells[i,j]:= FloatToStr(d[i,j]);

n:=StringGrid1.RowCount-1;

ShowMessage('Данные проклассифицированы');

memo4.Visible:=true;

button5.Visible:=true;

for i:=1 to 5 do

StringGrid1.Cells[i,0]:=IntToStr(i);

end;

// удаление заданной строки из переданной таблицы

procedure GridDeleteRow(RowNumber: Integer; Grid: TstringGrid);

var

i: Integer;

begin

Grid.Row := RowNumber;

if (Grid.Row = Grid.RowCount - 1) then

{ On the last row}

Grid.RowCount := Grid.RowCount - 1

else

begin

{ Not the last row}

for i := RowNumber to Grid.RowCount - 1 do

Grid.Rows[i] := Grid.Rows[i + 1];

Grid.RowCount := Grid.RowCount - 1;

end;

end;

// удаление заданного столбца из переданной таблицы

procedure GridDeleteCol(ColNumber: Integer; Grid: TstringGrid);

var

i: Integer;

begin

Grid.Col := ColNumber;

if (Grid.Col = Grid.ColCount - 1) then

{ On the last row}

Grid.ColCount := Grid.ColCount - 1

else

begin

{ Not the last row}

for i := ColNumber to Grid.ColCount - 1 do

Grid.Cols[i] := Grid.Cols[i + 1];

Grid.ColCount := Grid.ColCount - 1;

end;

end;

// процедура поиска сохранения минимума

procedure dd(SG:TstringGrid;ii:integer;jj:integer);

var i,j:integer;

begin

for i:=1 to SG.RowCount do

begin

if SG.Cells[ii,i]< SG.Cells[jj,i] then SG.Cells[ii,i]:=SG.Cells[jj,i];

if SG.Cells[i,ii]< SG.Cells[i,jj] then SG.Cells[i,ii]:=SG.Cells[i,jj];

SG.Cells[i,i]:=IntToStr(0);

end;

end;

procedure TForm1.Button5Click(Sender: TObject);

var i,j,ii,jj:integer;

min:double;

begin

while (StringGrid1.RowCount-1 >2) do

begin

min:=1000;

for i:=1 to (StringGrid1.RowCount-1) do

for j:=1 to (StringGrid1.RowCount-1) do

if (d[i,j]<min)and (i<>j) then

begin

min:=d[i,j];

ii:=i;

jj:=j;

end;

if (jj<=(StringGrid1.RowCount-1)) and (StringGrid1.RowCount>2) then

begin

dd(StringGrid1,ii,jj);

StringGrid1.Cells[ii,0]:=StringGrid1.Cells[ii,0]+'-'+StringGrid1.Cells[jj,0];

GridDeleteRow(jj,StringGrid1);

GridDeleteCol(jj,StringGrid1);

StringGrid1.Refresh;

end;

end;

ShowMessage('Матрица построена');

end;

procedure TForm1.N1Click(Sender: TObject);

begin

end;

// Save a TStringGrid to a file

procedure SaveStringGrid(StringGrid: TStringGrid; const FileName: TFileName);

var

f: TextFile;

i, k: Integer;

begin

AssignFile(f, FileName);

Rewrite(f);

with StringGrid do

begin

// Write number of Columns/Rows

Writeln(f, ColCount);

Writeln(f, RowCount);

// loop through cells

for i := 0 to ColCount - 1 do

for k := 0 to RowCount - 1 do

Writeln(F, Cells[i, k]);

end;

CloseFile(F);

end;

procedure TForm1.Save1Click(Sender: TObject);

begin

if OpenDialog1.Execute then

SaveStringGrid(StringGrid1, OpenDialog1.FileName);

end;

// Load a TStringGrid from a file

procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName);

var

f: TextFile;

iTmp, i, k: Integer;

strTemp: String;

begin

AssignFile(f, FileName);

Reset(f);

with StringGrid do

begin

// Get number of columns

Readln(f, iTmp);

ColCount := iTmp;

// Get number of rows

Readln(f, iTmp);

RowCount := iTmp;

// loop through cells & fill in values

for i := 0 to ColCount - 1 do

for k := 0 to RowCount - 1 do

begin

Readln(f, strTemp);

Cells[i, k] := strTemp;

end;

end;

CloseFile(f);

end;

procedure TForm1.N3Click(Sender: TObject);

begin

if OpenDialog1.Execute then

LoadStringGrid(StringGrid1, OpenDialog1.FileName);

end;

procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);

begin

Button6.caption:='Строка '+ IntToStr(UpDown1.Position);

end;

procedure TForm1.UpDown2Click(Sender: TObject; Button: TUDBtnType);

begin

Button7.caption:='Столбец '+ IntToStr(UpDown2.Position);

end;

procedure TForm1.Button6Click(Sender: TObject);

var i,k:integer;

begin

StringGrid1.RowCount:=UpDown1.Position+1;

with StringGrid1 do

for i := 0 to ColCount - 1 do

for k := 0 to RowCount - 1 do

Cells[i, k] := '';

refre();

end;

procedure TForm1.Button7Click(Sender: TObject);

var i,k:integer;

begin

StringGrid1.ColCount:=UpDown2.Position+1;

with StringGrid1 do

for i := 0 to ColCount - 1 do

for k := 0 to RowCount - 1 do

Cells[i, k] := '';

refre();

end;

procedure TForm1.N2Click(Sender: TObject);

begin

label1.Visible:=true;

label2.Visible:=true;

Button6.Visible:=true;

Button7.Visible:=true;

UpDown1.Visible:=true;

UpDown2.Visible:=true;

end;

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);

begin

if ((key<'0')or (key>'9'))and(Key<>'VK_BACK')and(Key<>',')then key:=#0;

end;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]