Нейросетевая экспертная система медицинской диагностики

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование

de

">#include

">#include

">#include

">#include

">#include

//---------------------------------------------------------------------------TForm1 : public TForm

{

__published:// IDE-managed Components*DataSource1;*DBGrid1;*Table1;*DBNavigator1;*Table1FIO;*Table1Sex0f1m;*Table1Age;*Table1IMT;*Table1Ogirenie;*Table1ADdegree;*Table1MaxSad;*Table1MaxDad;*Table1AGDuration;*Table1Hypertensiccrisisfreq;*Table1PresenceQnotQinfmiok;*Table1Stenokardianapryageniya;*Table1Kardnafonehyrp;*Table1Zastoynyeyavlenya;*Table1FKHSN;*Table1Mertcarpresandtype;*Table1ONMKinanamn;*Table1CHMTpresence;*Table1Allergicreactions;*Table1Sahdiab;*Table1Oslognsahdiab;*Table1Operationswithobnarkoz;*Table1NaslotpoAG;*Table1Menopausa;*Table1Body;*Table1CHSS;*Table1EOS;*Table1PQ;*Table1QRS;*Table1QT;*Table1NGESinEKG;*Table1GESinEKG;*Table1NGT;*Table1ABblock;*Table1SAblock;*Table1PBPNPG;*Table1PBLNPG;*Table1NBPNPG;*Table1NBLNPG;*Table1Anemia;*Table1Leycotcitipeniya;*Table1Trombotcitopeniya;*Table1SOE;*Table1Udvesmochi;*Table1Glucoza;*Table1Kholesterin;*Table1Kreatinin;*Table1KDR;*Table1FV;*Table1LP;*Table1PP;*Table1PG;*Table1Aorta;*Table1DLA;*Table1TMGP;*Table1TMGPTZSLG;*Table1IAPFARAdo;*Table1BKKdo;*Table1Diureticdo;*Table1Preptcentrdeystvdo;*Table1BABdo;*Table1SADpripostupl;*Table1DADpripostupl;*Table1PriyomIAPFARA;*Table1PriyomBAB;*Table1PriyomBKK;*Table1PriyomDiuret;*Table1Priyompreperattcentrde;*Button1;*Button2;*Memo1;*Memo2;*Memo3;__fastcall FormCreate(TObject *Sender);__fastcall FormDestroy(TObject *Sender);__fastcall Button1Click(TObject *Sender);__fastcall Button2Click(TObject *Sender);__fastcall DBNavigator1Click(TObject *Sender, TNavigateBtn Button);:// User declarations:// User declarations

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif.cpp

#include

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;NumElem; //текущее количество элементовNumElemSt=100; //количество элементов, которые нужно распределить по кластерамNumClust=3; //количество кластеровconst k=67; //размерность вектораToStep1=false; //перейти к первому шагу алгоритма?Finish=false; //закончить кластеризацию?

struct element

{ double Pt[k]; //данные

int IsKernel; //является ли центром кластера, если да, то какогоInCluster; //к какому кластеру принадлежитNumIntElements; //для массива кластеров порядковый номер элемента-соотвествующего центра кластра

};*Elem=new element [100];//массив элементов таблицы. Максимум 100*Cl=new element [NumClust]; //массив кластеров__fastcall TForm1::FormCreate(TObject *Sender)

{->Table1->Open();

}

//---------------------------------------------------------------------------__fastcall TForm1::FormDestroy(TObject *Sender)

{->Table1->Close();

}

//---------------------------------------------------------------------------

// расстояние от одного из элементов с номером m до центра кластера под номером n

double DistElCl(element *A, element *B, int m, int n)

{ro=0;(int i = 0; i < k; i++) {+= (A[m].Pt[i]-B[n].Pt[i])*(A[m].Pt[i]-B[n].Pt[i]);

}ro;

}

//расстояние между элементами под номерами m и n

double DistEl(element *A, int m, int n)

{ro=0;(int i = 0; i < k; i++) {+= (A[m].Pt[i]-A[n].Pt[i])*(A[m].Pt[i]-A[n].Pt[i]);

}ro;

}__fastcall TForm1::Button1Click(TObject *Sender)

{m= DBGrid1->DataSource->DataSet->RecordCount;s=FloatToStr(m);("Количество элементов "+s);

}

//---------------------------------------------------------------------------__fastcall TForm1::Button2Click(TObject *Sender)

{=DBGrid1->DataSource->DataSet->RecordCount;(NumElem==NumElemSt) {i=0;->First();(!Table1->Eof) {(int j = 0; j AsFloat;

}++;->Next();

}->First();

// все элементы изначально не принадлежат ни одному кластеру

for (int i = 0; i < NumElem; i++) {[i].IsKernel=0;[i].InCluster=0;

}

//задание первоначальных центров кластеров(int i = 0; i < NumClust; i++) {

Elem[i].IsKernel=i+1;[i].InCluster=i+1;[i]=Elem[i];

}(!Finish)

{

// шаг 1(int i = 0; i < NumClust; i++) {(int j = 0; j < NumElem; j++) {(Elem[j].IsKernel==i+1) {[i]=Elem[j];[i].NumIntElements=j;

break;

}

}

}

//рапределение элементов по кластерам(int i = 0; i < NumElem; i++) {

double min=9999999;distance=0;(Elem[i].IsKernel==0) {(int j = 0; j < NumClust; j++) {= DistElCl(Elem,Cl,i,j);(distance<min) {=distance;[i].InCluster=j+1;

}

}

}

}

//шаг 2

ToStep1=false;

//проверка, действительно ли данная точка является центром кластера

for (int i = 0; i < NumClust; i++) {distance=0;min;oldnum;newnum;=Cl[i].NumIntElements;(int l = 0; l < NumElem; l++) {((Elem[l].IsKernel==0)&&(Elem[l].InCluster==i+1)) {+=DistEl(Elem, oldnum,l);

}

}=distance;(int j = 0; j < NumElem; j++) {((Elem[j].IsKernel==0)&&(Elem[j].InCluster==i+1)) {=0;(int l = 0; l < NumElem; l++) {(Elem[l].InCluster==i+1) {+=DistEl(Elem, j,l);

}

}(distance<min) {=distance;=j;[oldnum].IsKernel=0;[newnum].IsKernel=i+1;=j;=true;;

}

}

}

}(!ToStep1) {=true;

}

}->Memo1->Lines->Add("Центр кластера 1 ");->Memo1->Text=Form1->Memo1->Text+FloatToStr(Cl[0].NumIntElements);->Memo2->Lines->Add("Центр кластера 2");->Memo2->Text=Form1->Memo2->Text+FloatToStr(Cl[1].NumIntElements);->Memo3->Lines->Add("Центр кластера 3");->Memo3->Text=Form1->Memo3->Text+FloatToStr(Cl[2].NumIntElements);->Memo1->Lines->Add("Кластер 1 ");->Memo2->Lines->Add("Кластер 2 ");->Memo3->Lines->Add("Кластер 3 ");(int i = 0; i Text+(FloatToStr(i))+";";

}(Elem[i].InCluster==2) {->Memo2->Text=Form1->Memo2->Text+(FloatToStr(i))+";";

}(Elem[i].InCluster==3) {->Memo3->Text=Form1->Memo3->Text+(FloatToStr(i))+";";

}

}

}{("Кластеризация уже проведена");

}

}

//---------------------------------------------------------------------------__fastcall TForm1::DBNavigator1Click(TObject *Sender, TNavigateBtn Button)

{ //присвоение новому элементу номера кластера при нажатии Post

if (Button ==nbPost) {++;[NumElem-1].IsKernel=0;(int i = 0; i Value;

}min=9999999;(int i = 0; i < NumClust; i++) {distance=0;(int j = 0; j < k; j++) {+=(Elem[NumElem-1].Pt[j]-Cl[i].Pt[j])*(Elem[NumElem-1].Pt[j]-Cl[i].Pt[j]);

}(distance<min)

{=distance;[NumElem-1].InCluster=i+1;

}

}(Elem[NumElem-1].InCluster==1) {->Memo1->Text=Form1->Memo1->Text+(FloatToStr(NumElem-1))+";";

}(Elem[NumElem-1].InCluster==2) {->Memo2->Text=Form1->Memo2->Text+(FloatToStr(NumElem-1))+";";

}(Elem[NumElem-1].InCluster==3) {->Memo3->Text=Form1->Memo3->Text+(FloatToStr(NumElem-1))+";";

}c = FloatToStr(Elem[NumElem-1].InCluster);

ShowMessage("Кластер номер "+c);

}}