Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Листинг результатов кодогенерации




//

//

// Generated by StarUML(tm) C# Add-In

//

// @ Project: Проект АИС

// @ File Name: Данные.cs

// @ Date: 04.06.2012

// @ Author:

//

//

public abstract class Данные {

public void упаковать(){

}

public void распоковать(){

}

}

//

//

// Generated by StarUML(tm) C# Add-In

//

// @ Project: Проект АИС

// @ File Name: Результаты.cs

// @ Date: 04.06.2012

// @ Author:

//

//

public abstract class Результаты: Данные{

}

//

//

// Generated by StarUML(tm) C# Add-In

//

// @ Project: Проект АИС

// @ File Name: Входные данные.cs

// @ Date: 04.06.2012

// @ Author:

//

//

public abstract class Входные данные: Данные{

}
//

//

// Generated by StarUML(tm) C# Add-In

//

// @ Project: Проект АИС

// @ File Name: Данные задачи.cs

// @ Date: 04.06.2012

// @ Author:

//

//

public class Данные задачи: Данные, Входные данные{

}

//

//

// Generated by StarUML(tm) C# Add-In

//

// @ Project: Проект АИС

// @ File Name: Результаты задачи.cs

// @ Date: 04.06.2012

// @ Author:

//

//

public class Результаты задачи: Результаты, Результаты{

}

//

//

// Generated by StarUML(tm) C# Add-In

//

// @ Project: Проект АИС

// @ File Name: Задание.cs

// @ Date: 04.06.2012

// @ Author:

//

//

public class Задание: Данные{

public *Данные Данные;

public *Результаты Резуьтаты;

}

//

//

// Generated by StarUML(tm) C# Add-In

//

// @ Project: Проект АИС

// @ File Name: Решение.cs

// @ Date: 04.06.2012

// @ Author:

//

//

public class Решение {

public *Задание задание1;

public *Алгоритм алгоритм;

public void начать(){

}

public void прервать(){

}

public void обработать исключения(){

}

}

//

//

// Generated by StarUML(tm) C# Add-In

//

// @ Project: Проект АИС

// @ File Name: Алгоритм.cs

// @ Date: 04.06.2012

// @ Author:

//

//

public abstract class Алгоритм {

public object Точность;

public *Задание задание1;

public void выполнить(){

}

}

//

//

// Generated by StarUML(tm) C# Add-In

//

// @ Project: Проект АИС

// @ File Name: Стат методы.cs

// @ Date: 04.06.2012

// @ Author:

//

//

public class Стат методы: Алгоритм{

}

//

//

// Generated by StarUML(tm) C# Add-In

//

// @ Project: Проект АИС

// @ File Name: корреляционно-регрессинный анализ.cs

// @ Date: 04.06.2012

// @ Author:

//

//

public class: Стат методы{

}

//

//

// Generated by StarUML(tm) C# Add-In

//

// @ Project: Проект АИС

// @ File Name:.cs

// @ Date: 04.06.2012

// @ Author:

//

//

public class з{

public object Исходная матрица;

public object Вектор коэф. управления;

public object Цены;

public void Вычислить уравнения регрессии(){

}

public void Проверка значимости уравнения(){

}

public void Выбор цены(){

}

public void Сохранение результата(){

}

public void Просмотр результата(){

}

}

//

//

// Generated by StarUML(tm) C# Add-In

//

// @ Project: Проект АИС

// @ File Name:.cs

// @ Date: 04.06.2012

// @ Author:

//

//

public class {

public object Исходная матрица;

public object Нормализованная матрица;

public object Матрица парных кореляций;

public object Коэф. детерминации;

public object Коэф. корреляции;

public void Расчет матриц парных корреляций(){

}

public void Расчет коэф. детерминации(){

}

public void Расчет коэф. корреляции(){

}

public void Проверка адекватности(){

}

}



Приложение 2

Листинг программы


public abstract class Данные

{

public void упаковать()

{

}

public void распоковать()

{

}

}

public class Данные_задачи: Входные_данные

{

public Данные_задачи(int[] Д,int[] О,double[] Ц)

{

Даты = Д;

Объемы = О;

Цены = Ц;

}

public int[] Даты;

public int[] Объемы;

public double[] Цены;

}

public abstract class Входные_данные: Данные

{

}

public abstract class Алгоритм {

public double Точность;

public Задание Задание_для_вычислений;

public virtual void Выполнить()

{

}

}

public class Задание

{

public Задание(Данные Исход)

{

Исходные_данные =Исход;

}

public Данные Исходные_данные;

public Результаты Резуьтаты_решения;

}

public abstract class Корреляционно_регрессинный_анализ: Статистические_методы

{

}

using System;

public class Регрессионный_анализ: Корреляционно_регрессинный_анализ

{

public Matrix Исходная_матрица;

Matrix Матрица_реакции;

public Matrix Вектор_коэф_упрвнения;

public override void Выполнить()

{

Перейти_к_линейной_форме();

Вектор_коэф_упрвнения =

// (Исходная_матрица.GetInvertible() * Матрица_реакции);

(Исходная_матрица.Transpose() * Исходная_матрица).GetInvertible() * Исходная_матрица.Transpose() * Матрица_реакции;

Данные_задачи Д = (Данные_задачи)(Задание_для_вычислений.Исходные_данные);

double Ymedium = Mx(Д.Объемы, 1);

double Qost_ = Qost(Д.Даты, Д.Объемы);

double Qr_ = Qr(Д.Объемы, Ymedium);

double R = 1 - Qost_ / Qr_;

double[] В = new double[3];

В[0]=Вектор_коэф_упрвнения[0];

В[1]=Вектор_коэф_упрвнения[1];

В[2]=Вектор_коэф_упрвнения[2];

string Пояснения =

string.Format("Уравнение регрессии имеет вид: " + '\n' + "f(x) = {0}x^2 + {1}x + {2} " + '\n',

Вектор_коэф_упрвнения[0].ToString(),

Вектор_коэф_упрвнения[1].ToString(),

Вектор_коэф_упрвнения[2].ToString()

);

Пояснения += " Коэффициент детерминации: " + R.ToString();

Задание_для_вычислений.Резуьтаты_решения

= new Результаты_задачи(Пояснения, В);

}

double Qr(int[] Oj,double y)

{

double Sum = 0;

for (int i = 0; i < Oj.Length; i++)

{

Sum +=

Math.Pow((double)Oj[i] - y, 2);

}

return Sum;

}

double Qost(int[] Dat, int[] Oj)

{

double Sum = 0;

for (int i = 0; i < Dat.Length; i++)

{

Sum +=

Math.Pow((double)Oj[i] -

(Dat[i] * Dat[i] * Вектор_коэф_упрвнения[0]+

Dat[i] * Вектор_коэф_упрвнения[1]+

Вектор_коэф_упрвнения[2]

),2);

}

return Sum;

}

void Перейти_к_линейной_форме()

{

Исходная_матрица = new Matrix(3, 3);

Матрица_реакции = new Matrix(3);

Данные_задачи Д = (Данные_задачи)(Задание_для_вычислений.Исходные_данные);

///М x

double M_21_12 = Mx(Д.Даты, 1);

///М x^2

double M_20_02_22 = Mx(Д.Даты, 2);

///М x^3

double M_10_01 = Mx(Д.Даты, 3);

///М x^4

double M_00 = Mx(Д.Даты, 4);

///М y

double My_2 = Mx(Д.Объемы, 1);

///Мxy

double Mxy_1 = Mxy(Д.Даты, Д.Объемы, 1);

///Мx2y

double Mxy_0 = Mxy(Д.Даты, Д.Объемы, 2);

Исходная_матрица[2, 2] = 1;

Исходная_матрица[0, 0] = M_00;

Исходная_матрица[1, 0] = M_10_01;

Исходная_матрица[0, 1] = M_10_01;

Исходная_матрица[0, 2] = M_20_02_22;

Исходная_матрица[2, 0] = M_20_02_22;

Исходная_матрица[1, 1] = M_20_02_22;

Исходная_матрица[2, 1] = M_21_12;

Исходная_матрица[1, 2] = M_21_12;

Матрица_реакции[0] = Mxy_0;

Матрица_реакции[1] = Mxy_1;

Матрица_реакции[2] = My_2;

}

double Mxy(int[] Dat, int[] Oj, int Степень)

{

double Sum = 0;

for (int i=0; i < Dat.Length; i++)

{

Sum += Math.Pow(Dat[i], Степень) * Oj[i];

}

return (Sum / Dat.Length);

}

double Mx(int[] Dat,int Степень)

{

double Sum = 0;

foreach(int D in Dat)

{

Sum += Math.Pow(D, Степень);

}

return (Sum / Dat.Length);

}

public void Вычислить_уравнения_регрессии()

{

}

public void Проверка_значимости_уравнения()

{

}

public void Выбор_цены()

{

}

public void Сохранение_результата()

{

}

public void Просмотр_результата()

{

}

}

public abstract class Результаты: Данные

{

}

public class Результаты_задачи: Результаты

{

public Результаты_задачи(string Дет, double[] Коэффициенты)

{

Детали_анализа = Дет;

Коэффициенты_регрессии = Коэффициенты;

}

public string Детали_анализа;

public double[] Коэффициенты_регрессии;

}

using System;

using System.Windows.Forms;

public class Решение {

public Задание Задание_для_вычислений;

public Алгоритм Алгоритм_вычислений;

public Решение(Задание Задание_для_вычислений_, Алгоритм Алгоритм_вычислений_)

{

Задание_для_вычислений = Задание_для_вычислений_;

Алгоритм_вычислений = Алгоритм_вычислений_;

}

public void Начать()

{

try

{

Алгоритм_вычислений.Задание_для_вычислений = Задание_для_вычислений;

Алгоритм_вычислений.Выполнить();

}

catch (Exception ex)

{

Обработать_исключения(ex.Message);

}

}

public void Прервать()

{

}

public void Обработать_исключения(string Text)

{

MessageBox.Show(Text);

}

}

public abstract class Статистические_методы: Алгоритм

{

}



public abstract class Данные {

public void упаковать(){

}

public void распоковать(){

}

}


program prog;

uses

Forms,

Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin

Application.Initialize;

Application.Title:= 'РГЗ - Метод кластерного анализа';

Application.CreateForm(TForm1, Form1);

Application.Run;

end.

unit Unit1;

interface

uses

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

Dialogs, Grids, StdCtrls, ComCtrls, Menus, Spin, Math;

type

THackGrid = class(TStringGrid);

TForm1 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

Save1: TMenuItem;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

N4: TMenuItem;

GroupBox1: TGroupBox;

Label1: TLabel;

Label2: TLabel;

SpinEdit1: TSpinEdit;

SpinEdit2: TSpinEdit;

GroupBox2: TGroupBox;

GroupBox3: TGroupBox;

Button2: TButton;

Memo1: TMemo;

GroupBox4: TGroupBox;

StringGrid1: TStringGrid;

Label3: TLabel;

SG2: TStringGrid;

GroupBox5: TGroupBox;

Memo2: TMemo;

Button1: TButton;

GroupBox6: TGroupBox;

Memo3: TMemo;

Button4: TButton;

GroupBox7: TGroupBox;

Memo4: TMemo;

Button5: TButton;

Label4: TLabel;

Memo5: TMemo;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Save1Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure Button7Click(Sender: TObject);

procedure N2Click(Sender: TObject);

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

procedure SpinEdit2Change(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure N4Click(Sender: TObject);

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

Label3.Caption:='Матрица значений нормированных переменных:';

SG2.Visible:=false;

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

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

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

begin

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

StringGrid1.Cells[i,j]:= FloatToStr(roundTo(z[i,j],-6));

end;

GroupBox6.Enabled:=true;

end;

procedure refre();

begin

Form1.Button1.Enabled:=false;

Form1.button4.Enabled:=false;

Form1.button5.Enabled:=false;

end;

procedure TForm1.Button2Click(Sender: TObject);

var i,j,k:integer;

sum:double;

begin

SG2.Visible:=true;

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

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

if StringGrid1.Cells[i,j]='' then

begin

ShowMessage('Данные для анализа не введены!'#13#10'Введите данные!');

exit;

end

else

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

SG2.ColCount:=StringGrid1.ColCount;

SG2.RowCount:=2;

SG2.Cells[0,0]:='Среднее значение';

SG2.Cells[0,1]:='Среднее квадратическое отклонение';

// вычисление 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);

SG2.Cells[k,0]:=FloatToStr(roundTo(mas_i[k],-6));

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));

SG2.Cells[j,1]:=FloatToStr(roundTo(sig[j],-6));

end;

GroupBox5.Enabled:=true;

end;

procedure TForm1.Button4Click(Sender: TObject);

var i,j,k:integer;

sum,a,b,c:double;

begin

Label3.Caption:='Матрица расстояний';

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.Width:=65*StringGrid1.ColCount;

StringGrid1.Refresh;

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

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

StringGrid1.Cells[i,j]:= FloatToStr(roundTo(d[i,j], -6));

n:=StringGrid1.RowCount-1;

GroupBox7.Enabled:=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;

StringGrid1.Height:=StringGrid1.RowCount*25;

StringGrid1.Width:=StringGrid1.ColCount*65;

label4.Caption:='Процесс объединения кластеров окончен';

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 SaveDialog1.Execute then

SaveStringGrid(StringGrid1, SaveDialog1.FileName);

end;

procedure TForm1.N3Click(Sender: TObject);

var f:TextFile;

ColC, rowC, i, j:integer;

st:String;

begin

for i:=1 to 20 do

begin

for j:=1 to 20 do

begin

mas[i,j]:=0;

z[i,j]:=0;

d[i,j]:=0;

end;

sig[i]:=0;

mas_i[i]:=0;

end;

n:=0;

Label3.Caption:='Исходные данные';

if OpenDialog1.Execute then

begin

try

Assignfile(f,opendialog1.FileName);

reset(f);

Readln(f,St);

colC:=StrToInt(St);

StringGrid1.ColCount:=colC;

Readln(f,St);

rowC:=StrToInt(St);

StringGrid1.RowCount:=rowC;

StringGrid1.Height:=25*rowC;

StringGrid1.Width:=65*colC;

for i:=1 to StringGrid1.RowCount-1 do StringGrid1.Cells[0,i]:=' '+IntToStr(i);

for i:=1 to StringGrid1.ColCount-1 do StringGrid1.Cells[i,0]:=' X'+IntToStr(i);

i:=1;

j:=1;

Repeat

Readln(f,St);

if(St='') then Readln(f,St)

else

begin

if i<rowC then

StringGrid1.Cells[j,i]:=St

else

if i=rowC then

begin

i:=1;

j:=j+1;

StringGrid1.Cells[j,i]:=St;

end;

i:=i+1;

end;

{Memo1.Lines.Strings[i]:=St;

if i>0 then Memo1.Lines.Add(St);

i:=i+1;}

Until Eof(f)=true;

closefile(f);

except

MessageDlg ('Ошибка открытия файла '+opendialog1.FileName+'!', mtError, [mbOK], 0);

end;

end;

end;

procedure TForm1.Button6Click(Sender: TObject);

var i,k:integer;

begin

if Button2.Enabled then Button2Click(Sender);

if Button1.Enabled then Button1Click(Sender);

if Button4.Enabled then Button4Click(Sender);

if Button5.Enabled then Button5Click(Sender);

end;

procedure TForm1.Button7Click(Sender: TObject);

var i,k:integer;

begin

end;

procedure TForm1.N2Click(Sender: TObject);

begin

label1.Visible:=true;

label2.Visible:=true;

SpinEdit1.Visible:=true;

SpinEdit2.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;

procedure TForm1.Button3Click(Sender: TObject);

var i,k:integer;

begin

if OpenDialog1.Execute then

SaveStringGrid(StringGrid1, OpenDialog1.FileName);

end;

procedure TForm1.SpinEdit2Change(Sender: TObject);

var i,k:integer;

begin

StringGrid1.RowCount:=SpinEdit1.Value+1;

StringGrid1.ColCount:=SpinEdit2.Value+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.FormShow(Sender: TObject);

begin

StringGrid1.RowCount:=SpinEdit1.Value+1;

StringGrid1.ColCount:=SpinEdit2.Value+1;

StringGrid1.Height:=25*StringGrid1.RowCount;

StringGrid1.Width:=65*StringGrid1.ColCount;

end;

procedure TForm1.N4Click(Sender: TObject);

begin

Close();

end;

end.





Дата публикования: 2015-11-01; Прочитано: 309 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.087 с)...